मैं एक क्रोम एक्सटेंशन बनाने की कोशिश कर रहा हूं जो मेरियम-वेबस्टर डिक्शनरी में वेब से शब्दों की खोज करता है, इसलिए मुझे एक एपीआई कुंजी मिली और मैंने background.js को contextMenu के लिए प्रोग्रामिंग करना शुरू कर दिया।

प्रतिक्रिया का एक उदाहरण यहां दिया गया है: https://dictionaryapi.com/products/api-collegiate-dictionary

नीचे एक नमूना कोड है जिसे मैंने चयनित शब्द के तने प्राप्त करने के लिए बनाया है।

मेरे manifest.json में:

"permissions": [
     "contextmenus":,
     "https://dictionaryapi.com/"
]

मेरे background.js में:

const apikey = "my_api_key";
var url = "";

function parse(json) {
    var script = JSON.parse(json);
    alert(script.stems.toString())
}

function searchText(info) {
    var xmlhttp = new XMLHttpRequest();
    url = "https://dictionaryapi.com/api/v3/references/collegiate/json/"+info.selectionText+"?key="+apikey;
    
    xmlhttp.open("GET", url, true)
    parse(xmlhttp.responseText)
}

chrome.contextMenus.create({
    title: 'Search "%s" in Dictionary',
    contexts: ['selection'],
    onclick: searchText
})

नतीजा:

इस छवि में मैंने संदर्भमेनू में एक आइटम बनाया है।

enter image description here

हालांकि, जब मैं इसे दबाता हूं, तो यह मुझे यह त्रुटि देता है:

Error in event handler: SyntaxError: Unexpected end of JSON input

यह दर्शाता है कि JSON.parse(json) फ़ंक्शन में parse(json) त्रुटि का कारण बना।

मुझे संदेह है कि यह पूरे JSON टेक्स्ट के आस-पास के ब्रैकेट की वजह से है। क्या टेक्स्ट से stems आइटम प्राप्त करने का कोई तरीका है, या फिर ब्रैकेट को हटाने का कोई तरीका है?

1
Jongwoo Lee 28 सितंबर 2020, 04:11

1 उत्तर

सबसे बढ़िया उत्तर

यहां दिखाया गया उदाहरण प्रतिक्रिया असल में JSON नहीं है, क्योंकि इसमें ओपनिंग और क्लोजिंग ब्रेसिज़ मौजूद नहीं हैं . आपको ब्रेसिज़ को स्वयं जोड़ना होगा; उदाहरण के लिए:

इसे बदलें:

parse(xmlhttp.responseText)

इसके लिए:

parse('{' + xmlhttp.responseText +'}')

मैं चाहता हूं कि 1 प्रतिष्ठा वाले उपयोगकर्ताओं द्वारा पोस्ट किए गए सभी प्रश्न वैसे ही लिखे और स्वरूपित हों जैसे कि आप करते हैं।

1
GirkovArpa 28 सितंबर 2020, 23:07