पकड़ी नहीं गई Syntax त्रुटि: अवांछित टोकन :


193

मैं अपने MooTools स्क्रिप्ट में AJAX कॉल चला रहा हूं, यह फ़ायरफ़ॉक्स में ठीक काम करता है लेकिन क्रोम में मुझे एक Uncaught SyntaxError: Unexpected token :त्रुटि मिल रही है , मैं ऐसा नहीं कर सकता। यह निर्धारित करने के लिए कि खराब कोड की पैदावार कुछ नहीं है, यह निर्धारित करने के लिए कोड टिप्पणी करना, मैं सोच रहा हूं कि यह JSON के वापस आने के साथ एक समस्या हो सकती है। कंसोल में जाँच मैं देख रहा हूँ JSON लौटा है यह:

{"votes":47,"totalvotes":90}

मैं इसके साथ कोई समस्या नहीं देखता, यह त्रुटि क्यों होगी?

vote.each(function(e){
  e.set('send', {
    onRequest : function(){
      spinner.show();
    },
    onComplete : function(){
      spinner.hide();
    },
    onSuccess : function(resp){
      var j = JSON.decode(resp);
      if (!j) return false;
      var restaurant = e.getParent('.restaurant');
      restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
      $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
      buildRestaurantGraphs();
    }
  });

  e.addEvent('submit', function(e){
    e.stop();
    this.send();
  });
});

1
JSON ठीक है। समस्या शायद यह है कि आप इसे कैसे संभालते हैं। कोड दिखाने से मदद मिलेगी।
तिकक

1
प्रश्न में कोड का भाग जोड़ा गया।
trobrock

वहाँ वाक्यविन्यास, जेएस और न ही JSON के साथ कुछ भी गलत नहीं लगता है। Jsfiddle.net पर एक (नहीं) कार्य-परीक्षण पोस्ट करने से HTML सहित - मदद मिलेगी।
Oskar Krawczyk

1
मैं वर्तमान में इंटरनेट का टेथरिंग कर रहा हूं, इसलिए मेरा मॉडेम उन वेबसाइटों के HTML स्रोत को संपीड़ित करता है, जो मैं ब्राउज़ करता हूं, इसलिए मैं वास्तव में कोड से बाहर सिर या पूंछ नहीं बना सकता हूं। लेकिन, शुरुआत के लिए हर JS कोड को बाहरी फ़ाइलों में रखा जाता है - यह हमेशा डिबगिंग को आसान बनाता है - आपको पता चलेगा कि त्रुटि JS या कुछ और के कारण हुई है।
Oskar Krawczyk

2
एक "अप्रत्याशित टोकन" कुछ अवैध चरित्र कोड होने की संभावना है। जब आप सांत्वना देने के लिए प्रिंट करते हैं तो इस तरह के कोड की संभावना नहीं होती है। इसलिए, स्ट्रिंग एक वर्ण को एक बार में प्रिंट करें या स्ट्रिंग के वास्तविक बाइट्स को देखने के लिए एक प्रोटोकॉल विश्लेषक या डीबगर आदि का उपयोग करें।
GroovyDotCom

जवाबों:


93

लाल त्रुटियों को देखकर

बिना पढ़ा हुआ वाक्यविन्यास: अप्रत्याशित टोकन <

आपके क्रोम डेवलपर के कंसोल टैब में प्रतिक्रिया निकाय में HTML का एक संकेत है।

वास्तव में आप जो देख रहे हैं <!DOCTYPE html>वह सर्वर से अनपेक्षित शीर्ष रेखा पर आपके ब्राउज़र की प्रतिक्रिया है ।


4
मुझे कोई अंदाजा नहीं है कि आप "अप्रत्याशित टोकन <" के बारे में क्यों बात कर रहे हैं जब प्रश्न के बारे में है Unexpected token :। ओपी की समस्या के लिए आपका जवाब पूरी तरह से असंबंधित है।
मीकल पेर्लाकोव्स्की

1
और मैं इसे कैसे ठीक करूं? मेरे पास एक php पुनर्निर्देशित है जो क्रोम में इसका कारण बन रहा है।
एक जीवित

7
@Andy_magoon में जोड़ने के लिए, मेरे मामले में, मेरे पास एक स्क्रिप्ट टैग था जो जावास्क्रिप्ट को सेवा देने वाला था, लेकिन क्योंकि अनुरोध एक HTML पृष्ठ पर पुनर्निर्देशित किया गया था (यह महत्वपूर्ण नहीं कि इसे पुनर्निर्देशित क्यों किया गया था), जो <- DOCTYPE html से शुरू होता है! >, जो मान्य जावास्क्रिप्ट नहीं है, ब्राउज़र HTML को जेएस के रूप में पार्स करने का प्रयास करते समय सिंटैक्सएर्रर लौटाता है।
david.barkhuizen

2
@Thom इसे ठीक करने का तरीका यह सुनिश्चित करना है कि HTTP को जावास्क्रिप्ट फ़ाइल लौटाए जो आप देख रहे हैं, और अप्रत्याशित HTML नहीं।
david.barkhuizen 11

1
मुझे यह त्रुटि बिल्कुल ठीक लगी क्योंकि, जैसा कि यह पता चला है, फ़ाइल पथ गलत है और इसे स्क्रिप्ट टैग में निर्दिष्ट फ़ाइल नहीं मिल सकती है।
न्यूमैन

80

ऐसे ही समस्या वाले लोगों के लिए एक FYI करें - मुझे बस अपने सर्वर को JSON को एप्लिकेशन / json के रूप में वापस भेजना था और डिफ़ॉल्ट jQuery हैंडलर ने ठीक काम किया।


4
मुझे लगता है कि मैं इस समस्या का विलोम हूं। मैं एक तीसरी पार्टी एपीआई से JSON का अनुरोध कर रहा हूं और वे प्रतिक्रिया के रूप में आवेदन / जावास्क्रिप्ट लौटा रहे हैं और मुझे इस प्रश्न में आपको वही त्रुटि मिल रही है। निश्चित नहीं कि इससे कैसे निपटा जाए।
wuliwong

5
एक अजीब समस्या है - यह लोकलहोस्ट पर ठीक काम करता है लेकिन गंभीर पर नहीं। कोई विचार क्यों?
विश्वकुमार

हैलो। मेरे पास सटीक समस्या है और मैं इसे हल नहीं कर सकता, क्या कोई मुझे बता सकता है कि आप JSON को सर्वर पर वापस कैसे भेजते हैं
Alen

धन्यवाद मैं आवेदन / जावास्क्रिप्ट भेज रहा था (जैसा कि मैंने इस एसओ को गलत बताया ) और सरल वैध JSON पर यह त्रुटि हो रही थी। इसे बदलकर application/jsonत्रुटि को हल किया गया। मैं JSONP का उपयोग नहीं कर रहा हूँ।
स्काइपिलॉट

यहां तक ​​कि मुझे एक ही त्रुटि मिल रही है "अनकॉन्स्टेड सिंटैक्स्योर: अनपेक्षित टोकन:", यहां तक ​​कि json प्रारूप {"सफलता": सही, "डेटा": 2593} में प्रतिक्रिया प्राप्त करने के बाद भी
रुपाली पेमारे

41

यह सिर्फ मेरे साथ हुआ है, और इसका कारण उपरोक्त कारणों में से कोई भी नहीं था। मैं jQuery कमांड getJSON का उपयोग कर रहा था और callback=?JSONP का उपयोग करने के लिए जोड़ रहा था (जैसा कि मुझे क्रॉस-डोमेन जाने की आवश्यकता थी), और JSON कोड को वापस {"foo":"bar"}करके त्रुटि प्राप्त कर रहा था।

ऐसा इसलिए है क्योंकि मुझे कॉलबैक डेटा शामिल करना चाहिए, जैसे कुछ jQuery17209314005577471107_1335958194322({"foo":"bar"})

यहाँ PHP कोड है जिसे मैंने इसे प्राप्त करने के लिए उपयोग किया है, जो JSON (बिना कॉलबैक के) का उपयोग करने पर अस्वीकृत हो जाता है:

$ret['foo'] = "bar";
finish();

function finish() {
    header("content-type:application/json");
    if ($_GET['callback']) {
        print $_GET['callback']."(";
    }
    print json_encode($GLOBALS['ret']);
    if ($_GET['callback']) {
        print ")";
    }
    exit; 
}

उम्मीद है कि भविष्य में किसी की मदद करेगा।


इसने मेरी बहुत मदद की। जब भी हम jsonp मेथड का उपयोग कर रहे हैं तो हमें jsoncallback डेटा के साथ json डेटा को लपेटना चाहिए। इसके अलावा jsonpcallback डेटा संख्याओं के साथ शुरू नहीं होना चाहिए। जब मैंने संख्याओं के साथ प्रयास किया, तो यह काम नहीं किया। जब मैंने इस उत्तर में दिखाए गए उसी प्रारूप के साथ इसे आजमाया, तो यह काम कर गया ...
गणेश बाबू

सही पर्याप्त है, लेकिन त्रुटि समान है और कोड इनायत से नीचा दिखाएगा और फिर भी काम करेगा यदि JSON का उपयोग किया जा रहा है।
ग्रिम ...

इसने मेरे लिए AJAX, jQuery और JSONP के साथ काम किया। आपका बहुत बहुत धन्यवाद!
पिय्रोट विटचन

16

मैंने सिर्फ समस्या हल की है। मानक अनुरोध कॉल के साथ कुछ समस्याएँ थीं, इसलिए यह वह कोड है जिसका मैंने उपयोग किया था:

vote.each(function(element){                
  element.addEvent('submit', function(e){
    e.stop();
    new Request.JSON({
      url : e.target.action, 
      onRequest : function(){
        spinner.show();
      },
      onComplete : function(){
        spinner.hide();
      },
      onSuccess : function(resp){
        var j = resp;
        if (!j) return false;
        var restaurant = element.getParent('.restaurant');
        restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
        $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
        buildRestaurantGraphs();
      }
    }).send(this);
  });
});

अगर किसी को पता है कि मानक अनुरोध ऑब्जेक्ट मुझे समस्याएं क्यों दे रहा है तो मुझे जानना अच्छा लगेगा।


3
मानक अनुरोध और request.json के बीच का अंतर ज्यादातर हेडर में है, यह जोड़ता है this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});- जाओ आंकड़ा
दिमितर क्रिस्टोफ

अजीब बात यह है कि इस मुद्दे के साथ क्या कारण था।
trobrock

3
$$वहाँ डबल क्या हैं ?
falsarella

@DimitarChristoff - $ $ के बारे में फालसेरेला के लिए कोई जवाब नहीं?
भालू

1
@bear डबल डॉलर चयनकर्ता को मूओटल्स में परिभाषित किया गया है।
एंथोनी फौलाद

10

मुझे लगा कि मैं अपना मुद्दा और संकल्प सूची में जोड़ दूंगा।

मुझे यह मिल रहा था: Uncaught SyntaxError: Unexpected token <और त्रुटि मेरे अजाक्स सफलता कथन में इस पंक्ति की ओर इशारा कर रही थी:

var total = $.parseJSON(response);

मैंने बाद में पाया कि json परिणामों के अलावा, HTML को प्रतिक्रिया के साथ भेजा जा रहा था क्योंकि मुझे अपने PHP में त्रुटि हुई थी। जब आपको PHP में कोई त्रुटि मिलती है, तो आप इसे विशाल नारंगी तालिकाओं के साथ चेतावनी देने के लिए सेट कर सकते हैं और उन तालिकाओं को जो JSON से फेंक रहा था।

मैंने पाया कि console.log(response)वास्तव में जो भेजा जा रहा था, उसे देखने के लिए केवल एक काम करके । यदि यह JSON डेटा के साथ कोई समस्या है, तो बस यह देखने का प्रयास करें कि क्या आप कंसोल.लॉग या कुछ अन्य कथन कर सकते हैं जो आपको यह देखने की अनुमति देगा कि क्या भेजा गया है और क्या प्राप्त हुआ है।


1
इसे मैने किया है। मैं कहीं न कहीं inmy php फाइल को जॅन्स कर रहा था और मेरी प्रतिक्रिया में php [// json data] मिल रहा था लेकिन मैं इसे पार्स नहीं कर पा रहा था। इसे पोस्ट करने के लिए धन्यवाद, ताकि मैं अपनी गलती का पता लगा सकूं।
निकोलस डेकर

ओपी समस्या पूरी तरह से अलग है। आपके मामले में आप HTML को JSON के रूप में पार्स करने का प्रयास कर रहे हैं, और OP के मामले में वह JSON को जावास्क्रिप्ट के रूप में पार्स करने का प्रयास कर रहा है।
मीकेल पेरोलाकोस्की

7

जब आप अपनी JSON फ़ाइल का अनुरोध करते हैं, तो सर्वर JSON Content-Type( text/javascript) के बजाय जावास्क्रिप्ट हेडर ( ) लौटाता है application/json

MooTools डॉक्स के अनुसार :

जावास्क्रिप्ट सामग्री-प्रकार के साथ प्रतिक्रियाओं का मूल्यांकन स्वचालित रूप से किया जाएगा।

परिणामस्वरूप MooTools जावास्क्रिप्ट के रूप में आपके JSON का मूल्यांकन करने की कोशिश करता है, और जब आप ऐसे JSON का मूल्यांकन करने का प्रयास करते हैं:

{"votes":47,"totalvotes":90}

जावास्क्रिप्ट के रूप में, पार्सर व्यवहार करता है {और }ऑब्जेक्ट नोटेशन के बजाय एक ब्लॉक गुंजाइश के रूप में। यह "कोड" का मूल्यांकन करने के समान है:

"votes":47,"totalvotes":90

जैसा कि आप देख सकते हैं, :वहां पूरी तरह से अप्रत्याशित है।

समाधान Content-TypeJSON फ़ाइल के लिए सही शीर्ष लेख सेट करना है । यदि आप इसे .jsonएक्सटेंशन के साथ सहेजते हैं , तो आपके सर्वर को इसे स्वयं करना चाहिए।


4

ऐसा लगता है कि आपकी प्रतिक्रिया का मूल्यांकन किसी भी तरह किया जा रहा है। यह Chrome में समान त्रुटि देता है:

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

यह '{...}' ब्रेसिज़ के कारण एक कोड ब्लॉक के रूप में जावास्क्रिप्ट द्वारा व्याख्या की जा रही है और एक वस्तु शाब्दिक नहीं है जैसा कि कोई उम्मीद कर सकता है।

मैं JSON.decode () फ़ंक्शन को देखूंगा और यह देखूंगा कि क्या वहां कोई ईवैल है।

इसी तरह का मुद्दा यहाँ: Eval () = अनपेक्षित टोकन: त्रुटि


2

अगर कुछ भी समझ में नहीं आता है, तो यह त्रुटि PHP त्रुटि के कारण भी हो सकती है जो HTML / जावास्क्रिप्ट के अंदर एम्बेडेड होती है, जैसे नीचे दी गई

<br />
<b>Deprecated</b>:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\Projects\rwp\demo\en\super\ge.php</b> on line <b>54</b><br />
var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}

<br />PHP द्वारा html में डाले गए कोड में नहीं आदि त्रुटि पैदा कर रहा है । इस तरह की त्रुटि को ठीक करने के लिए (चेतावनी को दबाएं), प्रारंभ में इस कोड का उपयोग किया

error_reporting(E_ERROR | E_PARSE);

देखने के लिए, पृष्ठ पर "राइट सोर्स" पर राइट क्लिक करें और फिर इस त्रुटि को पूरा करने के लिए संपूर्ण html की जांच करें।


1

जब आपका डेटा गलत जॅन्सन फॉर्मेट में लौटाता है तो " अनकनेक्टेड सिंटेक्स: अनपेक्षित टोकन " एरर उपस्थिति, आपको नहीं पता कि आपको गलत जॅन्सन फॉर्मेट मिला है।
कृपया इसे सतर्कता से जांचें (); समारोह

onSuccess : function(resp){  
   alert(resp);  
}

आपका संदेश प्राप्त होना चाहिए: {"firstName": "John", "lastName": "Doe"}
और फिर आप नीचे दिए गए कोड का उपयोग कर सकते हैं

onSuccess : function(resp){  
   var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); 
}

त्रुटि के साथ "बिना सिंटैक्स ई-मेल: अनपेक्षित टोकन "
लेकिन अगर आपको गलत json प्रारूप
पूर्व मिलता है :

... {"पहला नाम": "जॉन", "अंतिम नाम": "डो" "}

या

Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}

ताकि आपको गलत json प्रारूप मिले, कृपया JSON.decode या JSON.parse से पहले इसे ठीक करें


3
मैं डिबगिंग के console.log()बजाय उपयोग करने की सलाह देता हूं alert()
मिशैल पेरोलाकोव्स्की

1

मेरे साथ भी आज ऐसा ही हुआ। मैं EF का उपयोग कर रहा था और AJAX कॉल के जवाब में एक इकाई लौटा रहा था। मेरी इकाई पर आभासी गुण एक चक्रीय निर्भरता त्रुटि पैदा कर रहे थे जो सर्वर पर पता नहीं लगाया जा रहा था। वर्चुअल गुणों पर [ScriptIgnore] विशेषता को जोड़कर, समस्या को ठीक किया गया था।

ScriptIgnore विशेषता का उपयोग करने के बजाय, केवल डीटीओ को वापस करना बेहतर होगा।


1

ऐसा इसलिए हुआ क्योंकि मेरे पास /#जो भी मूल अनुरोध था, उसके अलावा किसी भी 404 को वापस करने के लिए मेरे एक्सप्रेस सर्वर में एक नियम सेटअप है । अनुरोध को संभालने के लिए कोणीय राउटर / जेएस की अनुमति देना। यदि उस पथ को संभालने के लिए कोई js मार्ग नहीं है, /#/whateverतो सर्वर से अनुरोध किया जाता है, जो कि केवल एक अनुरोध है/ , जो पूरे वेबपेज के ।

इसलिए उदाहरण के लिए अगर मैं एक अनुरोध करना चाहता था, /correct/somejsfile.jsलेकिन मुझे यह याद है /wrong/somejsfile.jsकि यह अनुरोध सर्वर पर किया गया है। वह स्थान / फ़ाइल मौजूद नहीं है, इसलिए सर्वर उत्तर देता है a 302 location: /#/wrong/somejsfile.js। ब्राउज़र खुशी से अनुप्रेषित करता है और पूरा वेबपेज वापस आ जाता है। ब्राउज़र पृष्ठ को js के रूप में पार्स करता है और आपको मिलता है

बिना पढ़ा हुआ वाक्यविन्यास: अप्रत्याशित टोकन <

अतः 302 अनुरोधों के लिए आपत्तिजनक मार्ग / अनुरोध देखने में सहायता करें।

आशा है कि किसी की मदद करता है।


1

मुझे भी यही समस्या थी और यह पता चला कि Json सर्वर से लौटा हुआ वैध Json-P नहीं था। यदि आप कॉल को क्रॉसडोमेन कॉल के रूप में उपयोग नहीं करते हैं तो नियमित Json का उपयोग करें।


OP JSON का उपयोग करता है, JSONP का नहीं।
मीकेल पेरोलाकोव्स्की

0

मुझे एक " SyntaxError: Unexpected token I" मिला जब मैं jQuery.getJSON()एक अस्थायी बिंदु मान को डी-क्रमांकित करने का प्रयास Infinityकरता था INF, जो कि JSON में अवैध है।


1
यह प्रश्न "अप्रत्याशित टोकन : " के बारे में है।
मिशैल पेरोलाकोव्स्की

0

मेरे मामले में, मैं उसी त्रुटि में भाग गया, जबकि मेरे mvc नियंत्रक में गलत मैपिंग के कारण स्प्रिंग mvc एप्लिकेशन को चला रहा था

@RequestMapping(name="/private/updatestatus")

मैंने उपरोक्त मैपिंग को बदल दिया है

 @RequestMapping("/private/updatestatus")

या

 @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)

0

मेरे लिए लाइट बल्ब तब चला जब मैंने स्रोत को क्रोम ब्राउज़र के अंदर पृष्ठ पर देखा। मैं एक बयान में एक अतिरिक्त ब्रैकेट था। आपको तुरंत फेलिंग लाइन पर एक क्रॉस के साथ लाल सर्कल दिखाई देगा। यह एक बल्कि अनजाने त्रुटि संदेश है, क्योंकि बिना पढ़ा हुआ सिंटैक्स त्रुटि: अप्रत्याशित टोकन लाइन नंबर का कोई संदर्भ नहीं देता है जब यह पहली बार क्रोम के कंसोल में दिखाई देता है।


0

मैंने इसमें गलत किया

   `var  fs = require('fs');
    var fs.writeFileSync(file, configJSON);`

पहले से ही मैंने fsचर को पहचान लिया था। लेकिन फिर से मैंने varदूसरी पंक्ति में रखा । यह एक तरह की त्रुटि भी देता है ...


0

AngularJs 1.4.6 या इसी तरह का अनुभव करने वालों के लिए, मेरी समस्या कोणीय के साथ मेरे टेम्पलेट को नहीं ढूंढने के साथ थी क्योंकि templateUrlमेरे द्वारा प्रदान की गई पथ (पथ) पर फ़ाइल नहीं मिली। मुझे बस एक पहुंच मार्ग उपलब्ध कराना था और समस्या दूर हो गई।


मैंने बेसियर url को सही करके उसी समस्या को हल किया - रूट फ़ोल्डर को इंगित किया = = <आधार href = "/">
अब्देली चंदनवाला

0

मेरे मामले में यह एक गलत url था (मौजूदा नहीं), इसलिए शायद दूसरी पंक्ति में आपका 'भेजें' अन्य होना चाहिए ...


0

मेरी गलती जावास्क्रिप्ट में url के आसपास सिंगल / डबल कोटेशन भूल रही थी :

इतना गलत कोड था:

window.location = https://google.com;

और सही कोड:

window.location = "https://google.com";

-2

पकड़ी नहीं गई Syntax त्रुटि: अवांछित टोकन }

Chrome ने मुझे इस नमूना कोड के लिए त्रुटि दी:

<div class="file-square" onclick="window.location = " ?dir=zzz">
    <div class="square-icon"></div>
    <div class="square-text">zzz</div>
</div>

और हल किया यह onclick को ठीक करने जैसा है

... onclick="window.location = '?dir=zzz'" ...

लेकिन त्रुटि का समस्या से कोई लेना देना नहीं है ।।


ओपी ने "अप्रत्याशित टोकन : " के बारे में पूछा ।
मीकल पेर्लाकोव्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.