2015-09-17 6 views
6

के साथ एक त्रुटि लौट रहा है यह वास्तव में मेरे दिमाग में दबदबा है। मुझे AJAX से एक त्रुटि कॉलबैक मिलता है। लेकिन अगर मैं त्रुटि संदेश से res.responseText (जो सही वापस आता है, btw) लेता हूं और इसका उपयोग करता है, तो यह सही काम करता है। जैसे कि मुझे सफलता कॉलबैक मिला था।jquery AJAX कॉल तैयार चरण 4, स्थिति 200, statustext ठीक

डेटा इस तरह सेट किया गया है:

var dataToSend = {fieldname : textdata}; 

और ajax कॉल इस तरह है:

var ajaxOptions = { 
    url: '/newpage', 
    data: JSON.stringify(dataToSend), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    cache: false, 
    processData: false, 
    type: 'POST', 
    success: function(res) { 
     console.log("success!"); 
     $('#' + divname).html(res); 
    }, 
    error: function(res) { 
     console.log("There was an error: " + JSON.stringify(res)); 
     $('#' + divname).html(res.responseText); 
    } 
}; 

$.ajax(ajaxOptions); 

त्रुटि संदेश है: {"readyState":4,"responseText" [this part is perfectly fine], "status":200, "statusText":"OK"}: एक त्रुटि हुई थी।

+0

'डेटा टाइप: 'जेसन', 'स्रोत से प्रतिक्रिया की उम्मीद है। क्या आप यह सुनिश्चित कर सकते हैं कि आप जिस स्रोत को मार रहे हैं वह जेसन को परिणाम के रूप में उत्पन्न कर रहा है? अगर इसे हटाने के बाद कोशिश न करें। – Jai

+1

ऐसा लगता है कि आप टेक्स्ट/एचटीएमएल लौट रहे हैं .... तो त्रुटि एक जेसन पार्स त्रुटि की संभावना है। 'डेटा टाइप: 'जेसन' हटाएं। दिखाएं कि वास्तव में क्या लौटाया गया है – charlietfl

+0

@ जय - यह एक अच्छा अनुमान था! मैंने अपने डेटाबेस में टाइप JSON डेटा को बदल दिया, लेकिन मुझे अभी भी वही त्रुटि मिलती है। – lynvie

उत्तर

8

यदि आपकी प्रतिक्रिया टेक्स्ट सही JSON नहीं है, तो एक पार्सिंग त्रुटि फेंक दी जाती है। या तो सुनिश्चित करें कि आपकी प्रतिक्रिया एक वैध JSON या dataType: "json" हटा दें।

jQuery docs से:

dataType (default: Intelligent Guess (xml, json, script, or html))

Type: String

The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are:

...

"json": Evaluates the response as JSON and returns a JavaScript object. Cross-domain "json" requests are converted to "jsonp" unless the request includes jsonp: false in its request options. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. (See json.org for more information on proper JSON formatting.)

1

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

अपने मामले dataType: 'json', में

तो सेट कर दिया जाता है और के रूप में आप टिप्पणी अनुभाग में उल्लेख किया है आप बैकएंड पर string निर्धारित किया है, तो आप करने के लिए अपने text डेटाप्रकार बदलने की जरूरत है।

करने के लिए अपने डेटा-प्रकार बदलने के लिए: एक खाली सरणी प्रतिध्वनित करने के लिए समस्या को हल करने के serverside

dataType: 'text', 
+0

मैं mongodb का उपयोग कर रहा हूँ। मेरे पास {टाइप: स्कीमा। टाइप्स। मिश्रित} है। जब मैं कंसोल करता हूं। Var डेटा को लॉग इन करें इसे प्रिंट करें: "शीर्षक": "यह शीर्षक।"। मैं इसे JSON.stringify (dataToSend) के साथ भेजता हूं। क्या यह JSON डेटा होने के लिए पर्याप्त नहीं है? – lynvie

+1

@lynvie, आपके पास जो समस्या है, वह रेस्पॉन डेटा के साथ है, न कि भेजे गए डेटा के साथ। आपको 'console.log (respondText)' करना होगा और जांचें कि वह JSON है या नहीं – Diego

0

एक ही रास्ता है, json इनकोडिंग:

echo json_encode([]); 
return; 

तो सफलता समारोह त्रुटि के बजाय ट्रिगर किया जाता है ।

या पाठ प्रतिक्रिया प्राप्त करने के लिए jquery को बताने के लिए बस स्क्रिप्टसाइड dataType: 'json', से dataType: 'text', बदलें।

संबंधित मुद्दे