JQuery $ .ajax त्रुटि प्रतिक्रिया पाठ कैसे प्राप्त करें?


234

मैं अपने jQuery के लिए त्रुटि प्रतिक्रिया भेज रहा हूं। हालाँकि, मुझे प्रतिक्रिया पाठ नहीं मिल सकता है (नीचे दिए गए उदाहरण में यह समुद्र तट पर चला जाएगा )

केवल jQuery का कहना है कि 'त्रुटि' है।

विवरण के लिए यह उदाहरण देखें:

php

<?
    header('HTTP/1.1 500 Internal Server Error');
    print "Gone to the beach"
?>

jQuery

$.ajax({
    type:     "post",
    data:     {id: 0},
    cache:    false,
    url:      "doIt.php",
    dataType: "text",
    error: function (request, error) {
        console.log(arguments);
        alert(" Can't do because: " + error);
    },
    success: function () {
        alert(" Done ! ");
    }
});

अब मेरा परिणाम ist:

लॉग इन करें:

 [XMLHttpRequest readyState=4 status=500, "error", undefined]

चेतावनी:

नहीं कर सकते क्योंकि: त्रुटि

कोई विचार?


समस्या आपके php कोड में दिखाई देती है। क्या आपको हेडर और बॉडी टेक्स्ट के बीच 2 लाइनब्रीक की आवश्यकता नहीं है? क्या headerफ़ंक्शन इसे संभालता है?
राफंडुक

thenduks: PHP जानता है कि वह क्या कर रहा है। मुद्दा यह है कि क्योंकि HTTP स्थिति 500 ​​पर वापस आ रही है, इसलिए इसमें $.ajax()दिए गए त्रुटि फ़ंक्शन को कॉल करता है।
बजे क्रिस चारबारुक

जवाबों:


309

प्रयत्न:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}

127
मैं JSON.parse (xhr.responseText)
Phil-R


19
evalयहाँ का उपयोग करना बहुत मायने नहीं रखता है। यदि आप JSON प्रतिक्रिया को पार्स करना चाहते हैं, तो उपयोग करें JSON.parse। ओपी के मामले में, प्रतिक्रिया JSON या जावास्क्रिप्ट भी नहीं है, इसलिए आपका evalसिर्फ एक सिंटैक्सएयर का कारण बनने जा रहा है।
मार्क अमेरी

1
JSON.parse को IE8 + की जरूरत है। ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… )। यदि पुराने ब्राउज़रों के समर्थन की आवश्यकता है, तो $ .parseJSON (jQuery, api.jquery.com/jQuery.parseJSON से ) का उपयोग करें
जूलियन

1
तथ्य यह xhrहै कि अपरिभाषित है बदल नहीं
phil294


51

responseTextअनुरोध पैरामीटर की संपत्ति को देखें।


मुझे IE8 में 'पार्सररोर' की समस्या है लेकिन क्रॉस-उत्पत्ति JSONP अनुरोध के लिए IE7 में काम कर रहा है। लेकिन responseText संपत्ति कहाँ है? डिबगिंग के दौरान प्रतिक्रिया ऑब्जेक्ट की जांच करते समय मैं इसे कहीं भी नहीं देखता हूं। मैं केवल तैयार। स्थिति, स्टेटसटैक्स और $ .ax () अनुरोध वस्तु के अन्य तरीकों को देखता हूं।
एनएलवी

Xhr ऑब्जेक्ट में प्रतिक्रिया के MIME प्रकार के आधार पर या तो responseText या responseXML होना चाहिए।
tvanfosson

मुझे समस्या मिल गई। JSONP अनुरोध बनाते समय वास्तव में jquery, XHR ऑब्जेक्ट बिल्कुल नहीं बनाएगा। JSON-Padding केवल यह है कि डायनामिक स्क्रिप्ट संदर्भ URL की ओर इशारा करते हुए जोड़े जाते हैं और json डेटा को एक विधि के साथ लपेटा जाएगा जो कि आमंत्रित किया गया है। तो XHR का उपयोग बिल्कुल नहीं किया जाता है।
एनएलवी

IE8 और क्रॉस-मूल के साथ कोई समस्या है। आज पूरा दिन बिताया :(। stackoverflow.com/questions/8165557/…
NLV

कैसे आप एक वस्तु में repsponseText पार्स?
चॉवी


7

इसी से मेरा काम बना है

    function showErrorMessage(xhr, status, error) {
        if (xhr.responseText != "") {

            var jsonResponseText = $.parseJSON(xhr.responseText);
            var jsonResponseStatus = '';
            var message = '';
            $.each(jsonResponseText, function(name, val) {
                if (name == "ResponseStatus") {
                    jsonResponseStatus = $.parseJSON(JSON.stringify(val));
                     $.each(jsonResponseStatus, function(name2, val2) {
                         if (name2 == "Message") {
                             message = val2;
                         }
                     });
                }
            });

            alert(message);
        }
    }

2
xhr.responseJSON भी उपलब्ध है। तो हम $ .parseJSON (xhr.responseText) से बच सकते हैं
प्रशांत

4

यह आपको पूरी प्रतिक्रिया देखने के लिए अनुमति देगा न कि केवल "responseText" मान

error: function(xhr, status, error) {
    var acc = []
    $.each(xhr, function(index, value) {
        acc.push(index + ': ' + value);
    });
    alert(JSON.stringify(acc));
}

3

आप इसे भी आजमा सकते हैं:

$(document).ajaxError(
    function (event, jqXHR, ajaxSettings, thrownError) {
        alert('[event:' + event + '], [jqXHR:' + jqXHR + '], [ajaxSettings:' + ajaxSettings + '], [thrownError:' + thrownError + '])');
    });

3

यदि आप लाइन नंबर के साथ सिंटैक्स त्रुटि प्राप्त करना चाहते हैं , तो इसका उपयोग करें

error: function(xhr, status, error) {
  alert(error);
}

मुझे एक पंक्ति संख्या नहीं मिली, लेकिन "अलर्ट (त्रुटि)" ने मुझे "Not Found" दिया, जब मैंने एक फ़ाइल को पढ़ने के लिए $ .get बुलाया, जो कि मुझे चाहिए था। Xhr.responseText ने एक 404 पृष्ठ लौटाया और मुझे बताया कि फ़ाइल मौजूद नहीं है।
जेम्स टॉमी

हाय जेम्स, अगर इसकी "नॉट फाउंड" त्रुटि को फेंक दें, जिसका अर्थ है "उरल" या "एक्शन" विधि को खोजने में असमर्थ।
कार्तिकेयन P


0

मैंने इसका इस्तेमाल किया, और इसने पूरी तरह से काम किया।

error: function(xhr, status, error){
     alertify.error(JSON.parse(xhr.responseText).error);
}

xhr.responseText वापसी {एरर: "एरर इन ....."}। तब, iam पार्सन JSON के लिए JSON.parse का उपयोग करता है। उपयोग का प्रयास करें।
जुआन सिलुपू माज़ा

यदि आप इसमें कुछ भी जोड़ना चाहते हैं तो उत्तर को संपादित करें । टिप्पणियाँ अस्थायी हैं, और प्रश्न / उत्तर अधिक स्थायी हैं।
ejderuby

-1

यदि आपको नेटवर्क त्रुटि नहीं हो रही है, और अपर्याप्त विशेषाधिकारों के लिए बैकएंड से एक त्रुटि को सतह पर लाना चाहते हैं, तो 200 के साथ अपनी प्रतिक्रिया दें और एक त्रुटि संदेश। फिर आपकी सफलता में हैंडलर चेक data.status == 'त्रुटि'


1
200 के साथ सतह क्यों? 200 ठीक स्थिति है। उसे एक कस्टम संदेश के साथ एक त्रुटि स्थिति वापस करनी चाहिए।
विधिवत

अधिकांश एपिस मैं वास्तव में प्रतिक्रिया बॉडी के अंदर एक त्रुटि कोड के साथ एक 200 वापस लौटाता हूं।
chovy

जब आप बैकएंड से एक त्रुटि कोड या त्रुटि संदेश देना चाहते हैं, तो 200 के अलावा कुछ और लौटाना समस्याग्रस्त हो सकता है। गैर-200 आमतौर पर यह इंगित करने के लिए उपयोग किया जाता है कि नेटवर्क कारणों से अनुरोध स्वयं विफल हो गया ... ऐसा नहीं है कि उपयोगकर्ता के पास उदाहरण के लिए अनुमति नहीं है। हमारे ऐप में, हम अपने "MakeAPICall" में वादों का उपयोग करते हैं जो 200 प्रतिक्रिया में एक त्रुटि कोड की तलाश करता है और failविधि के बजाय विधि को निकालता है done। सभी अनुरोध एक ऐसी वस्तु लौटाते हैं जिसमें कोड और संदेश के साथ एक 'स्थिति' वस्तु होती है।
चॉवि

1
अनुमति के लिए en.wikipedia.org/wiki/HTTP_403 कुछ और रोचक
किस्से

403 बहुत बुनियादी व्याख्या है ... और आप एक प्रतिक्रिया शरीर नहीं भेज सकते। मेरी अनुमति सिर्फ एक उदाहरण था। ऐसे त्रुटि कोड हैं जिन्हें मैं सतह पर रखना चाहता हूं जो ऐप-विशिष्ट हैं। HTTP कोड इन सभी को शामिल नहीं करता है।
चॉबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.