2013-02-20 43 views
10

का जवाब नहीं मैं इस तरह के रूप में एक ajax पोस्ट किया है:jQuery AJAX किया कॉलबैक 201

$.post("/api/v1/payment_methods/create_credit_card", values) 
.done (response) -> 
    console.log("GOOD JOB") 
.fail (response) -> 
    console.log("Adas") 

प्रतिक्रिया एक 201 है, तथापि, किया यह कब्जा करने और इसके बजाय यह विफल रहा है होना करने के लिए प्रतीत नहीं होता। मैंने सोचा कि 201 को सफलता माना जाएगा और इसे पूरा किया जाएगा। कोई विचार नहीं है कि यह क्यों काम नहीं करेगा?

ध्यान दें: ऊपर कोड coffeescript में है, जो वास्तव में सवाल को प्रभावित नहीं करता, लेकिन मेरे वाक्य रचना

+0

खैर मैं मूल रूप से यह अपने आप नहीं भेज रहा था। मैं जिस एपीआई को पोस्ट कर रहा था वह एक स्ट्रिंग वापस भेज देगा अगर यह एक सफलता थी जिसे 201 के रूप में बंडल किया गया था। क्या यह 200 रूपये मैन्युअल रूप से वापस करने के लिए बेहतर फॉर्म है? – justNeph

+1

यदि आप इसे 200 में बदलते हैं तो यह काम करता है? –

+0

मैंने 200 की कोशिश की है और अभी भी कोई अच्छा नहीं है। AJAX में स्टेटस चेक इसे चुनता है लेकिन यह अभी भी – justNeph

उत्तर

8

तो हम पता लगा कि क्या गलत, JSON.parse एक विन्यास त्रुटि फेंक रहा था बताते हैं - मूल्यों इसलिए भेजा वैध JSON प्रारूप में नहीं है। पोस्टर क्रोम में सिंटेक्स त्रुटि को देखने में सक्षम नहीं था, लेकिन फायरबग ने त्रुटि दिखायी।

यह इंगित करता है कि जब भी जावास्क्रिप्ट अपवाद फेंक देगा, प्रतिक्रिया अभी भी 200, 201, 202 आदि हो सकती है - लेकिन वाक्यविन्यास त्रुटि के कारण असफल() फ़ंक्शन ट्रिगर हो जाएगा।

EDIT - इसके अलावा आपको शायद एक अलग प्रतिक्रिया का उपयोग करना चाहिए, 200 से अधिक का उपयोग करें - ठीक है, लेकिन आईडी इस मामले में 202 - स्वीकृत करने की अनुशंसा करता है। स्रोत पर

+0

विफल रहता है, मुझे खेद है कि मेरा उपरोक्त कोड कॉफ़ीस्क्रिप्ट – justNeph

+0

में है, मैंने इसे 202 लौटने के लिए बदलने की कोशिश की लेकिन असफल होने पर अभी भी इसे कैप्चर करने लगता है – justNeph

+0

क्या आपने फ़ायरबग का उपयोग किया है और देखा है प्रतिक्रिया? –

2

देख रहे हैं, सफलता के बीच 200 भी चीज के लिए सक्रिय किया जाना चाहिए - 300 और 304 के लिए एक वैकल्पिक स्पष्ट statusCode बाहर कॉल करने के लिए है:

$.ajax({ 
    statusCode: { 
    201: function() { 
     console.log("HERE"); 
    } 
    } 
}); 
+0

मैं मैन्युअल रूप से एक विशिष्ट स्थिति कोड की जांच कर सकता हूं लेकिन मैं सभी सफलताओं की जांच करने के लिए पूर्ण विधि का उपयोग करना चाहता था। क्या कोई कारण है कि 201 या 202 के लिए आग नहीं डाली जाएगी? – justNeph

+0

जैसा मैंने कहा, स्रोत के आधार पर ऐसा प्रतीत होता है कि इसे कैप्चर करना चाहिए। मैं बस स्टेटस कोड कॉलबैक का सुझाव दे रहा था यह देखने के लिए कि क्या यह सही तरीके से कब्जा कर लिया गया है। –