JQuery.ajax से प्रतिक्रिया स्थिति कोड कैसे प्राप्त करें?


230

निम्नलिखित कोड में, मैं सब करने की कोशिश कर रहा हूं कि एक jQuery.ajax कॉल से HTTP प्रतिक्रिया कोड प्राप्त करना है। फिर, यदि कोड 301 है (स्थायी रूप से स्थानांतरित), तो 'स्थान' प्रतिक्रिया शीर्षलेख प्रदर्शित करें:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>jQuery 301 Trial</title>
  <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>

  <script type="text/javascript">
  function get_resp_status(url) {
    $.ajax({
      url: url,
      complete: function (jqxhr, txt_status) {
        console.log ("Complete: [ " + txt_status + " ] " + jqxhr);
        // if (response code is 301) {
        console.log ("Location: " + jqxhr.getResponseHeader("Location"));
        // }
      }
    });
  }
  </script>
  <script type="text/javascript">
  $(document).ready(function(){
    $('a').mouseenter(
      function () {
        get_resp_status(this.href);
      },
      function () {
      }
    );
  });
  </script>
</head>
<body>
  <a href="http://ow.ly/4etPl">Test 301 redirect</a>
  <a href="http://cnn.com/not_found">Test 404 not found</a>
</body>
</html>

क्या कोई इंगित कर सकता है कि मैं कहां गलत हो रहा हूं? जब मैं फायरबग में 'jqxhr' ऑब्जेक्ट की जांच करता हूं, तो मुझे स्थिति कोड नहीं मिल सकता है, न ही 'स्थान' प्रतिक्रिया हैडर। मैंने 'पूर्ण' की अंतिम पंक्ति में विराम बिंदु निर्धारित किया है।

बहुत धन्यवाद।



मुझे पता है कि यह पुराना है, लेकिन मुझे लगता है कि मैंने इसे (XHR.responseURL) हल किया: stackoverflow.com/a/39416846/4946681
Nate

जवाबों:


221

मैं jqXhr वस्तु पर स्थिति क्षेत्र देखता हूं, यहां काम करने के साथ एक बेला है:

http://jsfiddle.net/magicaj/55HQq/3/

$.ajax({
    //...        
    success: function(data, textStatus, xhr) {
        console.log(xhr.status);
    },
    complete: function(xhr, textStatus) {
        console.log(xhr.status);
    } 
});

2
यह jsFiddle में काम करने लगता है। उस और jQuery के दस्तावेज़ के आधार पर, xhr.status को वही करना चाहिए जो मुझे चाहिए। हालांकि, जब मैं अपने मूल कोड में एक ही कोशिश (txt_status jqxhr.status के साथ बदल दिया), मैं 0. यहाँ की jqxhr.status एक स्क्रीनशॉट हो रही है रखें: twitpic.com/4alsqj
महेश

10
मेरा मानना ​​है कि समस्या यह है कि आप वेब सर्वर के खिलाफ नहीं बल्कि स्थानीय रूप से फाइल सिस्टम से चल रहे हैं। मुझे लगता है कि अगर आपने एक स्थानीय वेब सर्वर को निकाल दिया, तो यह सही तरीके से काम करेगा, यहां इस विषय पर कुछ लेख दिए गए हैं: pearweb.com/javascript/XMLHttpRequest.html developer.mozilla.org/En/Using_XingHttpRequest "यहां ध्यान देने योग्य महत्वपूर्ण बात यह है कि परिणाम स्थिति की तुलना 200 की बजाय सफलता के लिए 0 से की जा रही है। इसका कारण यह है कि फ़ाइल और FTP योजनाएं HTTP परिणाम कोड का उपयोग नहीं करती हैं। "
आदम एरेस

यह महान है। खासकर जब मैं अपने बैकएंड को स्टेटस कोड भेज सकता हूं।
thatmiddleway

ध्यान दें कि यदि प्रतिक्रिया 302 जैसी पुनर्निर्देशित स्थिति है, तो यह 200
अकाउंटेंट م

52

इस पुराने धागे के पार एक समान समाधान की तलाश में आया और स्वीकृत उत्तर को .complete()विधि का उपयोग कर पाया jquery ajax। मैं यहाँ jquery वेबसाइट पर नोटिस उद्धृत करता हूँ :

JqXHR.success (), jqXHR.error (), और jqXHR.complete () कॉलबैक कर रहे हैं पदावनत jQuery 1.8 के रूप में। उनके अंतिम निष्कासन के लिए अपना कोड तैयार करने के लिए, jqXHR.done (), jqXHR.fail (), और jqXHR.always () के बजाय का उपयोग करें।

status codeअजाक्स प्रतिक्रिया के बारे में जानने के लिए , कोई निम्नलिखित कोड का उपयोग कर सकता है:

$.ajax( url [, settings ] )
.always(function (jqXHR) {
    console.log(jqXHR.status);
});

के लिए इसी तरह काम करता है .done()और.fail()


2
यह "अपरिभाषित" लौट रहा है
पेड्रो जोक्विन

43

शायद $ .ajax फ़ंक्शन को दिए गए पैरामीटर ऑब्जेक्ट की स्थिति कोड संपत्ति का उपयोग करने के लिए यह अधिक मुहावरेदार jQuery है:

$.ajax({
  statusCode: {
    500: function(xhr) {
      if(window.console) console.log(xhr.responseText);
    }
  }
});

हालांकि, जैसा कि लिविंगस्टन सैमुअल ने कहा, जावास्क्रिप्ट में 301 स्थिति कोड को पकड़ना संभव नहीं है।


41

जब आपका XHR अनुरोध एक अप्रत्यक्ष प्रतिक्रिया (HTTP स्थिति 301, 302, 303, 307) देता है, तो XMLHttpRequest स्वचालित रूप से पुनर्निर्देशित URL का अनुसरण करता है और उस URL की स्थिति कोड लौटाता है

आप गैर-पुनर्निर्देशन स्थिति कोड (200, 400, 500 आदि) के माध्यम से प्राप्त कर सकते हैं status xhr ऑब्जेक्ट संपत्ति के ।

तो तुम एक की प्रतिक्रिया हेडर से पुनः निर्देशित स्थान नहीं मिल सकता है 301, 302, 303या307 अनुरोध।

आपको अपने सर्वर लॉजिक को इस तरह से जवाब देने के लिए बदलना पड़ सकता है कि आप ब्राउज़र को ऐसा करने के बजाय रीडायरेक्ट को संभाल सकते हैं। एक उदाहरण कार्यान्वयन


24

आप अपनी प्रतिक्रिया सामग्री की जांच कर सकते हैं, बस इसे सांत्वना दें। आप देखेंगे कि चुड़ैल की संपत्ति एक स्थिति कोड है। यदि आप jsons नहीं समझते हैं, तो कृपया वीडियो देखें: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

यह बहुत ही बुनियादी ज्ञान की व्याख्या करता है जो आपको जावास्क्रिप्ट के साथ अधिक सहज महसूस कराता है।

आप इसे ajax अनुरोध के छोटे संस्करण के साथ कर सकते हैं, कृपया ऊपर कोड देखें:

$.get("example.url.com", function(data) {
                console.log(data);
            }).done(function() {
               // TO DO ON DONE
            }).fail(function(data, textStatus, xhr) {
                 //This shows status code eg. 403
                 console.log("error", data.status);
                 //This shows status message eg. Forbidden
                 console.log("STATUS: "+xhr);
            }).always(function() {
                 //TO-DO after fail/done request.
                 console.log("ended");
            });

उदाहरण कंसोल आउटपुट:

error 403 
STATUS: Forbidden 
ended

1
पूर्ण फ़ंक्शन मापदंडों के साथ, किए गए, विफल और हमेशा उपयोग करने के तरीके का पूरा कोड प्रदान करने के लिए धन्यवाद।
इवान्द

4

jqxhr एक json ऑब्जेक्ट है:

पूर्ण रिटर्न:
jqXHR (jQuery 1.4.x, XMLHTTPRequest में) ऑब्जेक्ट और अनुरोध की स्थिति को वर्गीकृत करने वाला एक स्ट्रिंग ("सफलता", "notmodified", "error", "timeout", "abort", या "parsererror") ।

देख: jQuery ajax

तो आप ऐसा करेंगे:

jqxhr.status स्थिति पाने के लिए


2

NB: jQuery 3.4.1 का उपयोग करना

$.ajax({
  url: URL,
  success: function(data, textStatus, jqXHR){
    console.log(textStatus + ": " + jqXHR.status);
    // do something with data
  },
  error: function(jqXHR, textStatus, errorThrown){
    console.log(textStatus + ": " + jqXHR.status + " " + errorThrown);
  }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.