AJAX

2011-02-14 11 views
5

के साथ जावास्क्रिप्ट कॉलबैक फ़ंक्शन मैं एक सामान्य फ़ंक्शन लिख रहा हूं जिसे मेरी स्क्रिप्ट में कई स्थानों पर पुन: उपयोग किया जाएगा।AJAX

फ़ंक्शन AJAX (jQuery लाइब्रेरी का उपयोग करके) का उपयोग करता है, इसलिए जब मैं AJAX पूर्ण हो जाता है तो निष्पादित करने के लिए मैं इस फ़ंक्शन में फ़ंक्शन (या कोड की रेखा) में किसी भी तरह से गुजरना चाहता हूं। मेरा मानना ​​है कि इसे कॉलबैक फ़ंक्शन होना आवश्यक है, लेकिन कुछ कॉलबैक उत्तरों के माध्यम से पढ़ने के बाद भी मैं थोड़ा उलझन में हूं कि मैं अपने मामले में कैसे कार्यान्वित करूंगा।

मेरे वर्तमान कार्य है:

function getNewENumber(parentENumber){ 

     $.ajax({ 
       type: "POST", 
       url: "get_new_e_number.php", 
       data: {project_number: projectNumber, parent_number: parentENumber}, 
       success: function(returnValue){ 
        console.log(returnValue); 
        return returnValue; //with return value excecute code 

       }, 
       error: function(request,error) { 
        alert('An error occurred attempting to get new e-number'); 
        // console.log(request, error); 
       } 
     }); 
    } 
इस समारोह मैं उसी तरह अन्य jQuery कार्यों यानी काम में कुछ करने के लिए सक्षम होना चाहते हैं के साथ

;

var parentENumber = E1-3; 

getNewENumber(parentENumber, function(){ 
    alert(//the number that is returned by getNewENumber); 
}); 
+0

मुझे लगता है, यह संभव नहीं है इस तरह से:

function getNewENumber(parentENumber) { return $.ajax({ ... }); } getNewENumber(E1 - 3).then(success_callback, error_callback); 

आप कि ढंग से काम के भीतर त्रुटि कॉलबैक रखना चाहते हैं आप रजिस्टर कर सकते हैं वहाँ कि बजाय । आपको कार्यों को स्वैप करना चाहिए। – kirilloid

उत्तर

7

बस getNewENumber समारोह के लिए एक और पैरामीटर देते हैं, तो का उपयोग करें कि कॉलबैक के रूप में।

// receive a function -----------------v 
function getNewENumber(parentENumber, cb_func){ 

    $.ajax({ 
      type: "POST", 
      url: "get_new_e_number.php", 
      data: {project_number: projectNumber, parent_number: parentENumber}, 

      // ------v-------use it as the callback function 
      success: cb_func, 
      error: function(request,error) { 
       alert('An error occurred attempting to get new e-number'); 
       // console.log(request, error); 
      } 
    }); 
} 

var parentENumber = E1-3; 

getNewENumber(parentENumber, function(returnValue){ 
    alert(returnValue); 
}); 
+0

बिल्कुल सही। मैं नया यह कुछ आसान होगा। यह सीखना हमेशा आसान होता है जब इसे आपके संदर्भ में रखा जाता है। धन्यवाद –

+0

@Zak: आपका स्वागत है। – user113716

+0

स्पष्ट और स्पष्ट उदाहरण के लिए धन्यवाद। – guptron

2

@patrick dw's anwser सही है। लेकिन आप सफलता समारोह अंदर console.log (या किसी अन्य कार्यों) बुला रखने के लिए हमेशा की तरह, कोई फर्क नहीं पड़ता फोन करने वाले कोड समारोह क्या करता है, तो आप कॉलबैक (अपने नए पैरामीटर) जोड़ सकते हैं चाहते हैं, तो आपके पास पहले से:

function getNewENumber(parentENumber, cb_func /* <--new param is here*/){ 

    $.ajax({ 
      type: "POST", 
      url: "get_new_e_number.php", 
      data: {project_number: projectNumber, parent_number: parentENumber}, 
      success: function(returnValue){ 
       console.log(returnValue); 
       cb_func(returnValue); // cb_func is called when returnValue is ready. 
      }, 
      error: function(request,error) { 
       alert('An error occurred attempting to get new e-number'); 
       // console.log(request, error); 
      } 
    }); 
} 

और बुला कोड, सिवाय इसके कि समारोह पैरामीटर द्वारा returnValue प्राप्त होगा तुम्हारा के रूप में एक ही रहता है:

var parentENumber = E1-3; 

getNewENumber(parentENumber, function(val /* <--new param is here*/){ 
    alert(val); 
}); 
+0

हाँ जब मैं इसे अपने कोड में कार्यान्वित कर रहा था तो मुझे आश्चर्य हुआ कि अगर मैं अन्य सफल कार्यवाही करना चाहता हूं तो इसे कैसे किया जाए। धन्यवाद –

0

यह बेहतर jQuery के Deferred Objects के साथ किया जा जाएगा। अपने AJAX कॉल jqXHR ऑब्जेक्ट को वापस करें। (या कम से कम बहुत मुश्किल)

function getNewENumber(parentENumber) { 
    var jqXHR = $.ajax({ ... }); 
    jqXHR.fail(...); 
    return jqXHR; 
} 

getNewENumber(E1 - 3).done(success_callback); 

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