2012-07-13 11 views
6

मेरे पास 404 को संभालने के लिए एक jquery AJAX स्टेटसोड फ़ंक्शन है ... एक और स्टैक ओवरफ़्लो उत्तर बताता है कि सफलता विधि में, this.url अनुरोध के लिए यूआरएल देता है ... हालांकि, यह मामला प्रतीत नहीं होता है मेरे स्टेटस कोड हैंडलर के लिए। कोई विचार? अनुरोध के लिए यूआरएल कैसे प्राप्त करें इस बारे में दस्तावेज में कुछ भी नहीं है।JQuery स्थिति कोड 404 - jqXhr url कैसे प्राप्त करें?

मेरे ajax विकल्प वस्तु इस तरह मोटे तौर पर लग रहा है (एक ब्रेस बंद चूक गए हों जब इस सवाल के लिए प्रासंगिक नहीं कोड बाहर ट्रिमिंग)

;(function($) { 
    var defaultSettings = { 
    // ... other plugin specific settings 
    ajaxOptions: 
    { 
        cache:false, 
        context:$(this), 
        statusCode: { 
         404:function(xhr) { 

         // this line... this.url is always undefined (so is xhr.url) 
          $('#body').append('<div class="errordisplay">Content not found' + (this.url?': ' + this.url:'') + '</div>'); 

        // ... do other stuff 

          return false; 

         } 
        } 
      } 
} 
+0

क्या आप 'संदर्भ' विकल्प में '$ .ajax()' में कुछ पास कर रहे हैं? –

+2

['this.url' काम करना चाहिए] (http://jsfiddle.net/jamesallardice/f3XTn/)। आपको अपना अधिक कोड पोस्ट करने की आवश्यकता हो सकती है। –

+0

यह AJAX ऑप्शन ऑब्जेक्ट कस्टम jquery प्लगइन के लिए डिफ़ॉल्ट विकल्प है, इसलिए मेरे पास "संदर्भ: $ (यह)" है ... प्रश्न कोड अधिक जानकारी के साथ अपडेट किया गया – Nathan

उत्तर

8

AJAX ईवेंट हैंडलर्स के लिए डिफ़ॉल्ट संदर्भ (यानी वस्तु this करने के लिए बाध्य हैंडलर में) वास्तव में url संपत्ति का खुलासा करता है क्योंकि यह $.ajaxSettings के बीच मिश्रण है और तर्क $.ajax() पर दिए गए हैं।

हालांकि, आपके मामले में, आप $(this) को context विकल्प में पास करके उस डिफ़ॉल्ट संदर्भ को ओवरराइड कर रहे हैं। इसके अलावा, ajaxOptions में ऐसा करने का अर्थ है कि उस ऑब्जेक्ट को वर्तमान यूआरएल के साथ विस्तारित करना आसान नहीं होगा।

मैं data() या इसी तरह का उपयोग करके AJAX कॉल से पहले आपके प्लगइन को बढ़ा रहा तत्व के साथ यूआरएल को जोड़ने का सुझाव दूंगा।

$.ajaxSetup({ 
    beforeSend: function(jqXHR, settings) { 
     jqXHR.url = settings.url; 
    } 
}); 

फिर statusCode कॉलबैक में xhr.url का उपयोग:

30

आप अनुरोध & सेटिंग्स निम्न कोड के साथ भेजने से पहले वस्तुओं को संशोधित कर सकता है। यह काम करना चाहिए।

+0

मेरे लिए काम करता है और डीबग उद्देश्यों के लिए यूआरएल लॉग करने की अनुमति देता है। –

+0

और यदि यह प्रक्रिया में रीडायरेक्ट करता है? – Elaman

+0

@Elaman ब्राउज़र पारदर्शी रूप से पुनर्निर्देशित करता है, इसलिए इसे 301/302 प्रतिक्रियाओं के लिए काम करना चाहिए। – janlay

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