Chrome: बिना पढ़ा हुआ सिंटेक्सऑयर: इनपुट का अनपेक्षित अंत


176

Google Chrome में अपना पेज लोड करते समय, मुझे कंसोल में एक अस्पष्ट त्रुटि मिलती है:

अनकंटेक्ट सिंटेक्सऑरर: इनपुट का अप्रत्याशित अंत

मुझे नहीं पता कि यह क्या कारण है। मैं इस त्रुटि को डीबग करने के बारे में कैसे जाऊंगा?


2
नेटवर्क स्निफर में प्रतिक्रिया की जाँच करने से आपको एक सुराग मिल सकता है। मेरा अनुमान है कि Content-lengthहेडर में प्रतिक्रिया की तुलना में अधिक बाइट्स निर्दिष्ट हैं, या शायद सर्वर किसी तरह अमान्य HTML भेजता है।
tdammers

2
गुम} अधिकांश समय (जावास्क्रिप्ट)। अपनी कक्षाओं और कार्यों के अंत की जाँच करें। अपनी स्क्रिप्ट के अंत में एक और क्लोजिंग} जोड़ने का प्रयास करें और अपने कोड को स्वतः-पुनः भेजें। यदि आपके कोड में कोई अजीब सा इंडेंटेशन है, तो उससे ठीक पहले कहीं और सबसे अधिक संभावना है कि एक} गायब हो गया है।
ओजी सीन

जेएस को गलत तरीके से लोड करने पर मेरे पास यह मुद्दा था। मैंने इसे लोड किया <script>https://example.com/a.js</script>और यह होना चाहिए था<script src="https://example.com/a.js"></script>
डैनियल

मुझे यह त्रुटि आज Google पत्रक पर मिल रही है। मेरा अनुमान है कि उनकी एक जेएस फाइल इतनी बड़ी है कि इसकी लोडिंग पूरी तरह से लोड किए बिना समाप्त हो रही है। या उनके ऐप सर्वर में से एक बग है और जेएस फ़ाइल पूरी तरह से डाउनलोड होने से पहले http कनेक्शन बंद कर रहा है।
टेडी

जवाबों:


227

इस विशेष त्रुटि के बारे में एक कष्टप्रद तथ्य है । ज्यादातर मामलों में आपका जावास्क्रिप्ट किसी तरह से टूट जाता है। उदाहरण के लिए एक }या ऐसा कुछ याद आ रहा है।

उदाहरण दिया गया है, यह "इनपुट का अप्रत्याशित अंत" भी देगा:

eval('[{"test": 4}') // notice the missing ]

लेकिन समस्याओं का मूल कारण यह प्रतीत होता है कि अनुरोध किए गए JSON url में एक सामग्री-प्रकार है , text/htmlजिसमें Chrome जाहिरा तौर पर HTML के रूप में पार्स करने की कोशिश करता है, जिसके परिणामस्वरूप इनपुट के अप्रत्याशित अंत का परिणाम इस तथ्य के कारण होता है कि इसमें शामिल किए गए छवि टैग शामिल हैं पार्स।

सेट करके देखें सामग्री प्रकार के लिए text/plainमुझे लगता है कि मुद्दों को ठीक करना चाहिए।

फिर भी, V8 एक बेहतर जॉब के बारे में बता सकता है, जिसमें इनपुट अप्रत्याशित रूप से समाप्त हो गया हो।


2
ठीक है बहुत बहुत धन्यवाद, मैंने एक साथ json अनुरोध को हटा दिया और त्रुटि दूर हो गई, मुझे अभी तक यह पता लगाना है कि मेरे json अनुरोध के साथ वास्तव में क्या गलत है। मुझे अभी पता नहीं था कि डिबगिंग कहाँ से शुरू की जाए। अगर मैं पूछ सकता हूँ कि आपने मूल कारण कैसे निर्धारित किया
dlaurent86

2
यह स्पष्ट नहीं हो सकता है। मैंने मिनिमाइज़र द्वारा मांगे जा रहे जेएस पर इस त्रुटि को कम कर दिया है, जबकि निर्वासित जेएस पूरी तरह से कानूनी और वैध था। दुर्भाग्य से, क्रोम केवल उस लाइन को दिखाता है जहां त्रुटि होती है, जो न्यूनतम JS के लिए आमतौर पर पूरी फ़ाइल होती है ...
सेरिन

इतना नहीं जहां इनपुट समाप्त हो गया (क्यूज जो अंत में होगा)। बल्कि, यह जानना कि क्या उम्मीद थी , टन में मदद करेगा।
एंड्रयूज

मेरी पूंछ को बचाया। मैं अस्पष्टता से बहुत परेशान हो रहा था। धन्यवाद।
साइप्रस 8.9

4
मेरे पास एक ही त्रुटि थी, क्योंकि मैं JSON.parse (पाठ) का उपयोग कर रहा था और पाठ मान खाली स्ट्रिंग था
A Khudairy

73

मोज़िला के लिए फायरबग की कोशिश करें - यह लापता की स्थिति दिखाएगा }

http://getfirebug.com/


12
Firebug की जरूरत नहीं थी। फ़ायरफ़ॉक्स में कंसोल ने मुझे बताया कि वास्तव में क्या लाइन और कौन सा चरित्र गायब था
डायलन वेलडे

1
फायरफग की जरूरत नहीं थी। फ़ायरफ़ॉक्स कंसोल ctrl+shift+iआपको बताएगा।
बेंजामिन क्राउज़ियर

1
चेतावनी, यदि स्क्रिप्ट को एक बहुत बड़ी रेखा पर छोटा किया जाता है, तो उम्मीद करें कि फ़ायरफ़ॉक्स कई मिनटों / घंटों / वर्षों तक लटका रहेगा।
सेरिन

1
यह इन सिंटैक्स त्रुटियों को दूर करने का सबसे आसान तरीका है
बेंटऑनकोडिंग

मेरे भगवान, धन्यवाद। मुझे लगता है कि डेवलपर टूलिंग के मामले में फ़ायरफ़ॉक्स की तुलना में क्रोम बहुत आगे है। यह आश्चर्यजनक है कि यह इस छोटी सी चीज को सही तरीके से प्राप्त करने में विफल क्यों है। मुझे एक बड़े सिरदर्द से बचाया!
यशायाह ली

33

एक और ऐसे ही सवाल पर मेरा मामला देखें :

मेरे मामले में, मैं एक खाली JSON पार्स करने की कोशिश कर रहा था:

JSON.parse(stringifiedJSON);

दूसरे शब्दों में, जो हुआ वह निम्नलिखित था:

JSON.parse("");

2
हाँ मैं यह भी एक था! आप खाली स्ट्रिंग के बजाय "{}" प्रदान करके आसानी से हल कर सकते हैं
क्रोनोकली

1
मुझे एक URL में डबल फ़ॉरवर्ड स्लैश (उदा। लोकलहोस्ट: 8080 // mypath / blagh) के कारण खाली json प्राप्त हो रहा था और सर्वर इसके लिए एक खाली प्रतिक्रिया दे रहा था।
जिपरसन

1
मैं इस समाधान की पुष्टि करने के लिए यहां आया था।
लुइस असुनकाओ

10

मुझे यह त्रुटि तब होती है जब मैंने }जावास्क्रिप्ट कोड में एक बंद ब्रेस चरित्र ( ) को हटा दिया है । जाँच करें कि आपके ब्रेसिज़ ठीक से संतुलित हैं।


10

रिकॉर्ड के लिए, इस त्रुटि के विभिन्न कारणों को खोजने की कोशिश कर रहे किसी के लिए भी। खाली HTML5 डेटा विशेषता

data-mydata = ''

त्रुटि का भी कारण बनता है। जब डेटा मान एक नल स्ट्रिंग है और आपको विशेषता को शामिल नहीं करना चाहिए, तो आपको जांचना चाहिए। यह बिना कहे चला जाता है यह काफी हद तक स्क्रिप्टेड HTML से संबंधित है।


तुम्हारे बिना कभी यह पता नहीं लगा होगा। मैं VideoJS का उपयोग कर रहा था और मैंने उनके पेज से उनके वीडियो प्लेयर के लिए HTML की प्रतिलिपि बनाई। इसमें एक डेटा-विशेषता प्लेसहोल्डर था जिसका आप उपयोग कर सकते थे लेकिन मैं नहीं था। वीडियो लोड नहीं हो रहा था और मुझे वह त्रुटि मिल रही थी जिसके बारे में हर कोई बात कर रहा है। डिलीट करने के बाद data-setup='{"example_option":true}' सब कुछ शानदार हुआ।
टायलर बुकेआ

1
@ user1002379, खुश मैं मदद कर सकता है।
DroidOS

8

मेरे लिए मुद्दा यह था कि मैं dataType: "json"एक POST अनुरोध के लिए $ .ajax कर रहा था जो एक HTTP 201 (निर्मित) और कोई अनुरोध निकाय वापस कर रहा था । यह फिक्स केवल उस कुंजी / मान को हटाने के लिए था।


मैंने ajax रिक्वेस्ट (अपलोड) शुरू की और इसे पूरा करने से पहले ही इसे खत्म कर दिया और मुझे यह त्रुटि मिली।
डस्टिन पॉसिएंट

6

JSHint लापता कोष्ठक या खराब सिंटैक्स का स्थान खोजने में अच्छा है।


6

इस त्रुटि का एक अन्य कारण: यदि आपका एपीआई जानबूझकर बिना किसी प्रतिक्रिया शरीर के साथ प्रतिक्रिया करता है, लेकिन 200 OKस्थिति कोड के बजाय एक स्थिति कोड के साथ प्रतिक्रिया करता है 204 No Content। कुछ JavaScript लाइब्रेरी अनपेक्षित सामग्री प्रकारों का अच्छी तरह से जवाब नहीं दे सकती हैं जब कोई सामग्री नहीं होती है, इसलिए सही स्थिति कोड का उपयोग करें!


3

निश्चित रूप से एक खुला ब्रैकेट होगा जो त्रुटि का कारण बना।

मेरा सुझाव है कि आप फ़ायरफ़ॉक्स में पृष्ठ खोलें, फिर फ़ायरबग खोलें और कंसोल की जांच करें - यह लापता प्रतीक दिखाएगा।

उदाहरण स्क्रीनशॉट:

फायरबग त्रुटि को उजागर करता है


2

मेरी समस्या Google Chrome कैश के साथ थी। मैंने फ़ायरफ़ॉक्स पर अपना वेब एप्लिकेशन चलाकर इसका परीक्षण किया और मुझे वह त्रुटि नहीं मिली। इसलिए तब मैंने Google क्रोम के कैश को खाली करने की कोशिश की और यह काम कर गया।


1

ऐसे मामलों में जहां आपका जावास्क्रिप्ट कोड एक ही लाइन में डाला जाता है, इस त्रुटि का दूसरा कारण //इसके बजाय उपयोग कर रहा है/**/ आपकी टिप्पणियों लिए ।

ख़राब ( आपके कार्य //के समापन के बाद सब कुछ टिप्पणी })

function example() { //comment console.log('TEST'); }

अच्छा (अपनी टिप्पणी सीमित करता है)

function example() { /* comment */ console.log('TEST'); }

काम किया, प्लस, आपको कास्टिंग के लिए "-टेक्स्ट-टेक्स्ट" के रूप में संदर्भित करना चाहिए।
बे

1

मेरे मामले में मैं जावास्क्रिप्ट को गतिशील रूप से जोड़ रहा था और स्ट्रिंग टेम्पलेट में 2 बार दोहरे उद्धरणों का उपयोग कर रहा था, इसलिए मैंने दूसरे को एकल उद्धरण में बदल दिया और त्रुटि हो गई। मुझे उम्मीद है कि यह यहां आने वाले कुछ लोगों की इसी वजह से मदद करेगा।


Addthis का उपयोग करके मैंने डबल स्ट्रिंग के साथ url में जोड़ा और फिर एकल उद्धरण में बदल गया और कंसोल त्रुटि गायब हो गई
tfa

0

मुझे एंगुलरज के लिए यूआई बूटस्ट्रैप निर्देशन का उपयोग करके इसी तरह की समस्या का सामना करना पड़ा - उब-डेट्रिकर, जब सुबह / दोपहर टॉगल दबाते हैं।

(अज्ञात) के लिए ईवेंट हैंडलर में त्रुटि: सिंटैक्सError: JSON इनपुट कोणीय समय-सारणी का अप्रत्याशित अंत

यह 'ट्रांस-ओवर' प्लगइन के कारण निकला (जो क्लिक होने पर किसी शब्द का अनुवाद करता है)। शायद मेरा जवाब किसी की मदद करेगा, क्योंकि मुझे इंटरनेट पर कुछ नहीं मिला।


0

चूंकि यह एक async ऑपरेशन है, onreadystatechangeइससे पहले कि मूल्य responseText में लोड हो सकता है, यह देखने का उपयोग करने का प्रयास window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); करें कि क्या त्रुटि बनी रहती है? बोल


0

मेरे पास यह त्रुटि थी और गार्ड को जोड़कर इसे ठीक किया readyStateऔर statusयहां दिखाया गया है:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};



0

खाली JSON को पार्स करने की कोशिश इस त्रुटि का कारण हो सकती है।

जब आपको सर्वर से या जो भी प्रतिक्रिया मिलती है, तो खाली होने पर पहले जांचें। उदाहरण के लिए:

function parseJSON(response) {
    if (response.status === 204 || response.status === 205) {
        return null;
    }
    return response.json();
}

तो आप के साथ ला सकते हैं:

fetch(url, options).then(parseJSON); 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.