दिलचस्प पोस्ट
शून्य भरा जावास्क्रिप्ट एरे बनाने के लिए सबसे कारगर तरीका है? एक स्विंग एप्लेट में सॉकेट का उपयोग करें JQuery के बिना एक AJAX कॉल कैसे करें? Node.js – एक्सप्रेस का उपयोग कर कच्चा अनुरोध निकाय प्राप्त करें "या" और || के बीच का अंतर रुबी में? क्या अन्यथा से प्राप्त या अधिक सुरक्षित है? एंड्रॉइड: सटीक ऊंचाई कैसे प्राप्त करें? मैं मोंगोज़ में कोई दस्तावेज़ कैसे अपडेट / अपग्रेड कर सकता हूं? Google टेक्स्ट-टू-स्पीच API पोस्ट डेटा के साथ PHP पुनर्निर्देशन कैसे टुकड़े के बीच के मूल्यों को पारित करने के लिए प्रारंभिक स्ट्रिंग का प्रारूप सूचकांक 0 से शुरू होने वाले विनिर्देश के अनुरूप नहीं है साझा किए गए लाइब्रेरी में वैश्विक और स्थिर चर का क्या होता है, जब यह गतिशील रूप से जुड़ा होता है? पायथन के बिना प्रक्रिया आउटपुट पढ़ना बंद करें? IPhone में पॉपअप के रूप में प्रदर्शन UIViewController

एजेक्स अनुरोध के लिए jQuery "पार्सररर" लौट रहा है

एक अजाक्स अनुरोध के लिए jquery से "पार्सररर" प्राप्त करना, मैंने पोस्ट को एक जीईटी में बदलने की कोशिश की, कुछ अलग-अलग तरीकों से डेटा लौटाने (क्लास आदि बनाना), लेकिन मुझे पता नहीं है कि समस्या क्या है

मेरा प्रोजेक्ट MVC3 में है और मैं jQuery 1.5 का उपयोग कर रहा हूं I में एक ड्रॉपडाउन है और onchange इवेंट पर मैं कुछ कॉल प्राप्त करने के लिए कुछ कॉल प्राप्त करने के लिए आग लगाता हूं।

ड्रॉपडाउन: (यह Viewbag में सूची से "दृश्य" लोड करता है और ईवेंट को फ़ायरिंग ठीक काम करता है)

@{ var viewHtmls = new Dictionary<string, object>(); viewHtmls.Add("data-bind", "value: ViewID"); viewHtmls.Add("onchange", "javascript:PageModel.LoadViewContentNames()"); } @Html.DropDownList("view", (List<SelectListItem>)ViewBag.Views, viewHtmls) 

जावास्क्रिप्ट:

 this.LoadViewContentNames = function () { $.ajax({ url: '/Admin/Ajax/GetViewContentNames', type: 'POST', dataType: 'json', data: { viewID: $("#view").val() }, success: function (data) { alert(data); }, error: function (data) { debugger; alert("Error"); } }); }; 

उपरोक्त कोड सफलतापूर्वक एमवीसी विधि को कॉल करता है और रिटर्न देता है:

 [{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"}, {"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}] 

लेकिन jquery $ .jax () विधि के लिए "parsererror" कह रही त्रुटि ईवेंट को सक्रिय करता है

वेब के समाधान से एकत्रित समाधान "एजेक्स अनुरोध के लिए jQuery "पार्सररर" लौट रहा है"

मैंने हाल ही में इस समस्या का सामना किया और इस प्रश्न पर ठोकर खाई।

मैंने इसे बहुत आसान तरीके से हल किया।

विधि एक

आप या तो dataType: 'json' हटा सकते हैं dataType: 'json' ऑब्जेक्ट से वास्तविक शब्द …

विधि दो

या आप क्या कर सकते हैं @ सिगिव जेसन के रूप में अपना डेटा वापस करके कह रहा था

कारण यह parserror संदेश तब होता है जब आप केवल एक स्ट्रिंग या अन्य मान वापस करते हैं, यह वास्तव में Json नहीं है, इसलिए पार्सर इसे पार्स करने में विफल रहता है।

इसलिए यदि आप dataType: json हटाते हैं dataType: json संपत्ति, यह Json रूप में इसे पार्स करने की कोशिश नहीं करेगा।

अन्य पद्धति के साथ यदि आप अपने डेटा को Json रूप में वापस करने के लिए सुनिश्चित करते हैं, तो पार्सर को यह पता चल जाएगा कि इसे ठीक से कैसे प्रबंधित किया जाए।

इस समस्या को संभालने के लिए सही तरीके से @ डेविड-ईस्ट का उत्तर देखें

यह उत्तर केवल jQuery 1.5 के साथ एक बग के लिए प्रासंगिक है जब फ़ाइल का उपयोग करते हुए: प्रोटोकॉल

JQuery 1.5 पर नवीनीकरण करते समय मुझे हाल ही में एक समान समस्या थी। एक सही प्रतिक्रिया प्राप्त करने के बावजूद त्रुटि हैंडलर निकाल दिया मैंने इसे complete घटना का उपयोग करके और फिर स्थिति मान की जांच करके इसका समाधान किया। उदाहरण के लिए:

 complete: function (xhr, status) { if (status === 'error' || !xhr.responseText) { handleError(); } else { var data = xhr.responseText; //... } } 

समस्या यह है कि आपका नियंत्रक वापसी की स्ट्रिंग या अन्य ऑब्जेक्ट को पार्स नहीं किया जा सकता है अजाक्स कॉल की बदले में जेसन को मिलने की उम्मीद है इस तरह नियंत्रक में जेन्सन रिजल्ट को वापस करने का प्रयास करें:

  public JsonResult YourAction() { ...return Json(YourReturnObject); } 

आशा करता हूँ की ये काम करेगा 🙂

आपने एजेक्स कॉल प्रतिक्रिया डेटा प्रकार को निर्दिष्ट किया है:

'Json'

जहां वास्तविक अजाक्स प्रतिक्रिया एक मान्य JSON नहीं है और इसके परिणामस्वरूप JSON पार्सर एक त्रुटि फेंक रहा है।

सबसे अच्छा तरीका जो मैं सुझाऊंगा वह डेटा टाइप को बदलना है:

'पाठ'

और सफलता के कॉलबैक के भीतर मान्य है कि मान्य JSON वापस किया जा रहा है या नहीं, और अगर JSON सत्यापन विफल हो गया है, तो स्क्रीन पर इसे अलर्ट करें ताकि एजेक्स कॉल वास्तव में असफल रहने के उद्देश्य के लिए इसका स्पष्ट हो। कृपया एक नज़र इसे देखिये:

 $.ajax({ url: '/Admin/Ajax/GetViewContentNames', type: 'POST', dataType: 'text', data: {viewID: $("#view").val()}, success: function (data) { try { var output = JSON.parse(data); alert(output); } catch (e) { alert("Output is not valid JSON: " + data); } }, error: function (request, error) { alert("AJAX Call Error: " + error); } }); 

आपका JSON डेटा गलत हो सकता है इसे मान्य करने के लिए http://jsonformatter.curiousconcept.com/

हटाने के लिए बहुत से सुझाव हैं

 dataType: "json" 

हालांकि मैं यह अनुमोदन करता हूं कि यह अंतर्निहित मुद्दे की अनदेखी कर रहा है। यदि आपको विश्वास है कि रिटर्न स्ट्रिंग वास्तव में JSON है तो प्रतिक्रिया की शुरुआत में ग़ैर रिक्त स्थान का पता लगाएं। फिल्डलर में इसे देखने पर विचार करें मेरे इस तरह दिखते हैं:

 Connection: Keep-Alive Content-Type: application/json; charset=utf-8 {"type":"scan","data":{"image":".\/output\/ou... 

मेरे मामले में यह PHP के साथ अवांछित पात्रों को उगलने में एक समस्या थी (इस मामले में यूटीएफ फ़ाइल BOMs)। एक बार जब मैंने इन्हें हटा दिया तो यह समस्या को ठीक कर लेते समय भी रखते थे

 dataType: json 

सुनिश्चित करें कि आप किसी भी डीबग कोड को हटा दें या जो कुछ भी अनजाने में सूचनाओं को आउटपुट कर रहे हों कुछ हद तक स्पष्ट है, लेकिन पल में भूलना आसान है।

मुझे नहीं पता कि यह अभी भी वास्तविक है, लेकिन समस्या एन्कोडिंग के साथ थी एएनएसआई में बदलकर मेरे लिए समस्या हल हो गई

यदि आपको आईटी में HTTP GET का उपयोग करते हुए यह समस्या मिलती है तो मैंने कैश को सेट करके इस समस्या का समाधान किया: false। जैसा कि मैंने HTML और json दोनों अनुरोधों के लिए एक ही यूआरएल का उपयोग किया है, यह जेएसओन कॉल करने के बजाय कैश मारा।

 $.ajax({ url: '/Test/Something/', type: 'GET', dataType: 'json', cache: false, data: { viewID: $("#view").val() }, success: function (data) { alert(data); }, error: function (data) { debugger; alert("Error"); } }); 

आपको डेटाटाइप को हटा देना चाहिए: "जेसन" फिर जादू को देखिए … ऐसा करने का कारण यह है कि आप जेसन ऑब्जेक्ट को साधारण स्ट्रिंग में परिवर्तित कर रहे हैं .. इसलिए जेएसएनओ पार्सर जेसन ऑब्जेक्ट नहीं होने के कारण उस स्ट्रिंग को पार्स करने में सक्षम नहीं है।

 this.LoadViewContentNames = function () { $.ajax({ url: '/Admin/Ajax/GetViewContentNames', type: 'POST', data: { viewID: $("#view").val() }, success: function (data) { alert(data); }, error: function (data) { debugger; alert("Error"); } }); }; 

वेब .net mvc / api से ऑपरेशन प्राप्त करें, सुनिश्चित करें कि आपको अनुमति मिलती है

  return Json(data,JsonRequestBehavior.AllowGet); 

मुझे "त्रुटि के साथ अनुरोध वापसी: पार्सररर" भी मिल रहा था। जावास्क्रिप्ट कंसोल में मेरे मामले में यह जेएसन की बात नहीं थी, लेकिन मुझे दृश्य पाठ क्षेत्र को एक वैध एन्कोडिंग पास करना पड़ा।

  String encodedString = getEncodedString(text, encoding); view.setTextAreaContent(encodedString); 

समस्या

window.JSON.parse $ .parseJSON फ़ंक्शन में त्रुटि उत्पन्न करता है।

 <pre> $.parseJSON: function( data ) { ... // Attempt to parse using the native JSON parser first if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } ... </pre> 

मेरा समाधान

Needjs टूल का उपयोग करके जेओओ लोड करना

 <pre> define(['jquery', 'jquery.overload'], function() { //Loading jquery.overload }); </pre> 

jquery.overload.js फ़ाइल सामग्री

 <pre> define(['jquery'],function ($) { $.parseJSON: function( data ) { // Attempt to parse using the native JSON parser first /** THIS RAISES Parsing ERROR if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } **/ if ( data === null ) { return data; } if ( typeof data === "string" ) { // Make sure leading/trailing whitespace is removed (IE can't handle it) data = $.trim( data ); if ( data ) { // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test( data.replace( rvalidescape, "@" ) .replace( rvalidtokens, "]" ) .replace( rvalidbraces, "")) ) { return ( new Function( "return " + data ) )(); } } } $.error( "Invalid JSON: " + data ); } return $; }); </pre> 

यदि आप dataType: json को हटाना / बदलना नहीं चाहते हैं तो dataType: json , आप एक कस्टम converter परिभाषित करके jQuery के कठोर पार्सिंग को ओवरराइड कर सकते हैं:

 $.ajax({ // We're expecting a JSON response... dataType: 'json', // ...but we need to override jQuery's strict JSON parsing converters: { 'text json': function(result) { try { // First try to use native browser parsing if (typeof JSON === 'object' && typeof JSON.parse === 'function') { return JSON.parse(result); } else { // Fallback to jQuery's parser return $.parseJSON(result); } } catch (e) { // Whatever you want as your alternative behavior, goes here. // In this example, we send a warning to the console and return // an empty JS object. console.log("Warning: Could not parse expected JSON response."); return {}; } } }, ... 

इसका उपयोग करने पर, आप व्यवहार को अनुकूलित कर सकते हैं जब प्रतिक्रिया को JSON के रूप में पार्स नहीं किया जा सकता (भले ही आपको खाली प्रतिक्रिया वाला शरीर मिल जाए!)

इस कस्टम कनवर्टर के साथ, जब तक अनुरोध अन्यथा सफल नहीं होता (1xx या 2xx प्रतिक्रिया कोड)।