2010-06-18 16 views
9

के साथ $ .ajax फ़ंक्शन के लिए सफलता हैंडलर हमने एक विश्वसनीय सर्वर API लिखा है। किसी भी कारण से, हमने निर्णय लिया कि DELETEs के लिए, हम एक खाली प्रतिक्रिया के साथ 204 (कोई सामग्री) स्थिति कोड वापस करना चाहते हैं। मैं jQuery से कॉल करने के लिए कोशिश कर रहा हूँ, एक सफलता हैंडलर में गुजर और नष्ट करने के लिए क्रिया की स्थापना:एक गैर-मानक http स्थिति कोड

jQuery.ajax({ 
    type:'DELETE', 
    url: url, 
    success: callback, 
}); 

सर्वर की ओर एक 204 है, लेकिन सफलता हैंडलर कभी नहीं कहा जाता है। क्या कोई तरीका है कि मैं 204s को सफलता हैंडलर को आग लगाने की अनुमति देने के लिए jQuery को कॉन्फ़िगर कर सकता हूं?

उत्तर

11

204 सफलता के रूप में व्यवहार किया जाना चाहिए। आप किस jQuery का उपयोग कर रहे हैं? मैंने कुछ परीक्षण किए और सभी 200 रेंज स्टेटस कोड सफलता हैंडलर में गए। jQuery 1.4.2 के लिए स्रोत इस बात की पुष्टि करता:

// Determines if an XMLHttpRequest was successful or not 
httpSuccess: function(xhr) { 
    try { 
     // IE error sometimes returns 1223 when 
     // it should be 204 so treat it as success, see #1450 
     return !xhr.status && location.protocol === "file:" || 
      // Opera returns 0 when status is 304 
      (xhr.status >= 200 && xhr.status < 300) || 
      xhr.status === 304 || xhr.status === 1223 || xhr.status === 0; 
    } catch(e) {} 

    return false; 
}, 
+0

ठीक है, अब मैं उलझन में हूँ। मैं इसे फिर से कोशिश कर रहा हूं, और ऐसा लगता है कि यह काम कर रहा है। ऐसा लगता है कि मैं कुछ और गलत तरीके से कर रहा होगा। धन्यवाद! – Bennidhamma

3
jQuery.ajax({ 
    ... 
    error: function(xhr, errorText) { 
     if(xhr.status==204) successCallback(null, errorText, xhr); 
     ... 
    }, 
    ... 
}); 

बदसूरत ... लेकिन मदद कर सकता है

+0

धन्यवाद sje397, यह समझ में आता है। आपको लगता है कि यह एकमात्र तरीका है? – Bennidhamma

9

मैं एक simliar मुद्दा था, क्योंकि मेरी स्क्रिप्ट के रूप में भी "application/json" "सामग्री प्रकार" शीर्षक भेज रही थी। अनुरोध सफल होने पर, यह एक खाली स्ट्रिंग JSON.parse नहीं कर सका।

2

यह तकनीकी रूप से अपने सर्वर
तरह पॉल ने कहा, एक json के एक सर्वर सामग्री प्रकार एक त्रुटि के रूप में jQuery द्वारा इलाज किया जाता है के साथ एक खाली 204 प्रतिक्रिया पर एक समस्या है।

आप डेटा को मैन्युअल रूप से ओवरराइड करके jQuery में इसके आसपास प्राप्त कर सकते हैं 'टेक्स्ट' टाइप करें।

$.ajax({ 
    url: url, 
    dataType:'text', 
    success:(data){ 
     //I will now fire on 204 status with empty content 
     //I have beaten the machine. 
    } 
}); 
2

इस सफलता पर कालबैक में वैकल्पिक तरीका है ... मुझे लगता है कि आप के लिए काम करेंगे।

$.ajax({ 
    url: url, 
    dataType:'text', 
    statusCode: { 
       204: function (data) { 
        logic here 
       } 
}); 
संबंधित मुद्दे