2012-04-06 10 views
23

एक jQuery अजाक्स कॉल मैं वर्तमान में 200 और 304 के statusCode से निपटने कर रहा हूँ लेकिन मैं यह भी "त्रुटि" परिभाषित "किसी भी ऐसी त्रुटियां जो वापस आ सकता है पकड़ने के लिए।

में यदि वहाँ एक सत्यापन संदेश संबंधित हम 400 की स्थिति कोड वापस -। गलत अनुरोध

यह तो statusCode "400" समारोह मैं परिभाषित किया था में गिरने से पहले "त्रुटि" समारोह में गिर जाता है जिसका मतलब है दो कार्रवाइयां तब

।। आदर्श रूप में मैं "त्रुटि" और "सफलता" को परिभाषित नहीं करने के लिए और केवल परिभाषित "statusCode" लेकिन क्या मैं जरूरत है एक "कुछ" इतना है कि मैं की जरूरत नहीं है के लिए है चाहते हैं प्रत्येक स्थिति को घोषित करने के लिए कोड केवल 2-3 है जो मैं अलग-अलग संभालना चाहता हूं।

$.ajax({ 
     type: 'POST', 
     contentType: "application/json", 
     url: "../API/Employees.svc/" + EmployeeId + "/Company/" + CompanyId, 
     data: jsonString, 
     statusCode: { 
      200: function() { //Employee_Company saved now updated 

       hideLoading(); 
       ShowAlertMessage(SaveSuccessful, 2000); 
       $('#ManageEmployee').dialog('close'); 

      }, 
      304: function() { //Nothing to save to Employee_Company 

       hideLoading(); 
       $('#ManageEmployee').dialog('close'); 

       if (NothingToChange_Employee) { 
        ShowAlertMessage(NothingToUpdate, 2000); 
       } else { 
        ShowAlertMessage(SaveSuccessful, 2000); 
       } 
      } 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      AjaxError(XMLHttpRequest, textStatus, errorThrown); 
     } 
    }); 

उत्तर

29

के बाद से "पूर्ण" घटना हमेशा आप बस वहाँ से स्थिति कोड मिलता है और सफलता और त्रुटि कार्यों की अनदेखी

complete: function(e, xhr, settings){ 
    if(e.status === 200){ 

    }else if(e.status === 304){ 

    }else{ 

    } 
} 
+0

इस सुंदर अच्छी तरह से काम करने लगता है और, एक अच्छा जवाब है, हालांकि मेरी स्थिति में मैं वास्तव में दोनों सफलता उपयोग करने के साथ समाप्त हो गया और विफल रहे। और यदि आप प्रत्येक में ऊपर बयान देते हैं तो ऐसा ही करें। – Steve

+12

पूर्ण() अब बहिष्कृत है। पूर्ण, असफल, हमेशा प्रतिस्थापन विधियों का उपयोग करें। – redochka

9

यह मैं था क्या उपयोग है सकता निकाल दिया जाता है:

error: function (xhr, textStatus, errorThrown) { 
    switch (xhr.status) { 
     case 401: 
      // handle unauthorized 
      break; 
     default: 
      AjaxError(xhr, textStatus, errorThrown); 
      break; 
    } 
} 
2

jQuery AJAX प्रतिक्रिया complete, success, error को बहिष्कृत कर दिया गया है। अधिक अप-टू-डेट संस्करण बजाय .done, .fail, .always वादे के साथ।

सफलता पर .always पर .done का हस्ताक्षर है, विफलता पर यह .fail के हस्ताक्षर में परिवर्तन है। textStatus का उपयोग करके आप सही चर पकड़ सकते हैं और शरीर की सामग्री वापस कर सकते हैं।

var jqxhr = $.ajax({ 
    type: frm.attr('method'), 
    url: frm.attr('action'), 
    data: frm.serialize(), 
    dataType: 'json', 
    }) 

    .done(function(data, textStatus, jqXHR) { 
     alert("success"); 
    }) 
    .fail(function(jqXHR, textStatus, errorThrown) { 
     alert("error"); 
    }) 

    .always(function(data_jqXHR, textStatus, jqXHR_errorThrown) { 

     if (textStatus === 'success') { 
      var jqXHR = jqXHR_errorThrown; 
     } else { 
      var jqXHR = data_jqXHR; 
     } 
     var data = jqXHR.responseJSON; 

     switch (jqXHR.status) { 
      case 200: 
      case 201: 
      case 401: 
      default: 
       console.log(data); 
       break; 
     } 

}); 

jqxhr.always(function() { 
    alert("second complete"); 
}); 
+0

'jqXHR.error()' पदावनत किया गया है, नहीं '' error' jQuery.ajax करने का विकल्प() '। अगर यह परोक्ष उसके साथ पदावनत है, लेकिन कम से कम यह रूप में पदावनत दर्ज नहीं किया है पता नहीं है। – falstro

1

दृष्टिकोण को आपके प्रारंभिक तर्क के समान रखने के लिए, मैं स्थिति कोड ऑब्जेक्ट को पास करना जारी रखूंगा। हालांकि, आप अभी भी जानते हैं कि "else" 4xx या 5xx प्रकार के त्रुटि कोड के दायरे में गिर जाएगा।

इसलिए मैं अपने मूल कोड को अद्यतन करेगा:

var statusCodeResponses = { 
    200: function() { //Employee_Company saved now updated 

     hideLoading(); 
     ShowAlertMessage(SaveSuccessful, 2000); 
     $('#ManageEmployee').dialog('close'); 

    }, 
    304: function() { //Nothing to save to Employee_Company 

     hideLoading(); 
     $('#ManageEmployee').dialog('close'); 

     if (NothingToChange_Employee) { 
      ShowAlertMessage(NothingToUpdate, 2000); 
     } else { 
      ShowAlertMessage(SaveSuccessful, 2000); 
     } 
    } 
}; 

var genericElseFunction = function(response){ 
    // do whatever other action you wanted to take 
}; 

for(var badResponseCode=400; badResponseCode<=599; badResponseCode++){ 
    statusCodeResponses[badResponseCode] = genericElseFunction; 
} 

$.ajax({ 
    type: 'POST', 
    contentType: "application/json", 
    url: "../API/Employees.svc/" + EmployeeId + "/Company/" + CompanyId, 
    data: jsonString, 
    statusCode: statusCodeResponses, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     AjaxError(XMLHttpRequest, textStatus, errorThrown); 
    } 
});