2011-03-30 11 views
6

मैं जिस तरह से बंद कोर्स किया जा सकता है, लेकिन अगर यह एक अजाक्स सफलता में JQuery prefilter कार्यक्षमता प्रतिक्रिया डेटा का उपयोग और विश्लेषण करने के लिए संभव है मैं सोच रहा था और मेरे लौटे JSON (त्रुटि संदेशों) में कुछ तत्वों के अस्तित्व के आधार पर कॉल में error इवेंट हैंडलर को सशर्त रूप से अग्रेषित करें।उपयोग JQuery AJAX prefilter रिस्पांस डाटा और सशर्त आगे का निरीक्षण करने के लिए करने के लिए 'त्रुटि' इवेंट हैंडलर

यह अच्छा होगा अगर यह पृष्ठ में किसी भी AJAX फ़ंक्शन के लिए वैश्विक रूप से सेट किया गया हो।

शायद यह इस बारे में जाने का सबसे अच्छा तरीका नहीं है; अगर किसी के पास कोई वैकल्पिक विचार है, तो कृपया मुझे बताएं!

prefilter:

//only run prefilter on ajax calls expecting JSON back in response, would this 
//be the right way to do this? 
$.ajaxPrefilter("json", function(options, originalOptions, jqXHR) { 
    jqXHR.success(function(data, textStatus, jXHR) { 
     if(hasErrors(data)) { 
      //forward to error event handler? 
     } 
    }); 
}); 

अजाक्स कॉल:

$.ajax({ 
     type:  "POST", 
     data:  { 
        theData: "someData"      
       }, 
     url:  theUrl, 
     dataType: 'json', 
     cache: false,   
     success: function (data, textStatus, jqXHR) { 
        //do stuff on success 
       } 
     error: function (jqXHR, textStatus, errorThrown) { 
        //I want to do this stuff if data contains errors from server 
       } 
}); 

बहुत बहुत शुक्रिया!

उत्तर

12

यहां मैं यह कैसे करता हूं: मैं मूल सफलता फ़ंक्शन (प्रत्येक अनुरोध के लिए विशिष्ट) संग्रहीत करता हूं, और फिर एक और कॉलबैक संलग्न करता हूं। अगर इसमें त्रुटियां नहीं हैं, तो मैं मूल कॉलबैक कॉल करता हूं:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    var originalSuccess = options.success; 

    options.success = function (data) { 
     if(hasErrors(data)) { 
      //forward to error event handler or redirect to login page for example 
     } 
     else { 
      if (originalSuccess != null) { 
       originalSuccess(data); 
      } 
     } 
    }; 
}); 
+0

मैं प्रत्येक सफलता कॉलबैक के बाद कस्टम हैंडलर का उपयोग कर रहा था। अब मैंने jQuery एपीआई में $ .ajaxPrefilter देखा और आपकी प्रतिक्रिया देखी। आपने मुझे समय हासिल किया। धन्यवाद। – jsonx

+1

यह सही है! आपको बहुत - बहुत धन्यवाद! – icats

+1

आप कैसे हैं 1. सभी '.done' कॉलबैक रोकें, और 2. 'EEErors (डेटा) 'सशर्त में' .fail' कॉलबैक चलाएं? मैंने 'jqXHR.reject()' की कोशिश की लेकिन समाप्त हो गया 'jqXHR.reject फ़ंक्शन नहीं है'। सशर्त अनुभाग में आप वास्तव में क्या लिखते हैं? – kenn

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