2012-04-22 11 views
19

मैं jQuery AJAX का उपयोग करके तृतीय पक्ष वेब पेज पर कॉल कर रहा हूं। लॉग इन सफलता और 401 अगर लॉग-इन असफल होने पर उनके पृष्ठ के अनुसार उन्होंने मुझे स्टेटस कोड 200 भेजा। यहां मेरा jQuery कोड नमूना है। यह कोड IE पर ठीक काम करता है लेकिन क्रोम या फ़ायरफ़ॉक्स पर काम नहीं करता है। मामला क्या हो सकता है?jQuery AJAX हैंडल 401 अनधिकृत

$.ajax({ 
    type: 'GET', 
    url: hostURL + 'j_teo_security_check?callback=?', 
    dataType: 'json', 
    data: ({j_username : $("#inp_user_name").val(), j_password: $("#inp_user_pwd").val()}), 
    statusCode: { 
     401:function() { alert("401"); }, 
     404:function() { alert("404"); }, 
     200:function() { alert("200"); }, 
     201:function() { alert("201"); }, 
     202:function() { alert("202"); } 
    }, 
    complete: function(httpObj, textStatus){ 
    alert(httpObj.status); 
    }, 
    error: function(){ 
    alert("error"); 
    }, 
    async: false 
}); 

मैंने सभी कार्यों की त्रुटि, सफलता, पूर्ण और स्थिति कोड की कोशिश की। उनमें से कोई भी 401 त्रुटि संभाल नहीं।

+1

फायरबग पर अनुरोध/प्रतिक्रिया ठीक है? – skafandri

+0

आईई और क्रोम ('console.log' उन्हें) पर भेजा गया डेटा क्या है? क्या आपके पास आईडी 'inp_user_name' या' inp_user_pwd' आईडी के साथ कई तत्व नहीं हैं? 'कैश: झूठा' विकल्प जोड़ने का प्रयास करें। साथ ही, आप 'डेटा: ([...])' रेखा पर ब्रांड्स को हटा सकते हैं। साथ ही, क्या आपके पास HTML कोड का उपयोग किया गया है? वे "inp_user_xxx" किस प्रकार के तत्व हैं? – pomeh

+0

नहीं। सब कुछ अनुरोध के साथ ठीक काम करता है। जब मैं सही पासवर्ड पास करता हूं तो स्टेटस कोड 200 के साथ कोई समस्या नहीं है। और जब मैं गलत पासवर्ड भेजता हूं तो यह प्रतिक्रिया कोड 401 प्राप्त करता है। मैं 401 होने पर इसे पकड़ना चाहता हूं। लेकिन कोई भी कार्य इसका समर्थन नहीं करता है। मैंने सभी कार्यों की त्रुटि, सफलता, पूर्ण, और स्थिति कोड की कोशिश की। मेरी आवश्यकता 401 त्रुटि पकड़ने के लिए है। इसे रोकने के लिए नहीं। –

उत्तर

10

मैं इसे बोले के रूप में ठीक कर सकता हूं।

$(document).ready(function(){ 
     $("#cmdLogin").click(function(){    
      var request = $.ajax({ 
       url : hostURL + 'j_teo_security_check', 
       data: ({j_username : $("#inp_user_name").val(), j_password: $("#inp_user_pwd").val()}), 
       dataType : "jsonp", 
       timeout : 5000 
      }); 

      request.success(function() { 
       loginSuccess(); 
      }); 

      request.error(function(httpObj, textStatus) {  
       if(httpObj.status==200) 
        loginSuccess(); 
       else 
        loginFail(); 
      }); 
     }); 
    }) 

मैंने जो किया वह 401 त्रुटि कभी वापस नहीं आया क्योंकि टाइमआउट जोड़ा गया था। चूंकि यह स्टेटस कोड 200 और पार्सिंग त्रुटियों के साथ भी त्रुटि फ़ंक्शन पर जाता है, इसलिए मैंने त्रुटि के अंदर 200 स्थिति को अनदेखा करने के लिए बनाया है।

3

ठीक है, ऐसा लगता है कि आप jsonp का उपयोग कर रहे हैं और मुझे लगता है कि यह jsonp की सीमा हो सकती है। जरा देखो तो।

http://forum.jquery.com/topic/jquery-ajax-with-datatype-jsonp-will-not-use-error-callback-if-request-fails

ऐसा लगता है कि पिछले पोस्ट पर एक समाधान है की तरह। उम्मीद है की यह मदद करेगा!

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