2016-11-02 47 views
0

我試圖將我的ajax調用推廣到函數中,如下所示。我之前沒有這樣做過,我不確定我是否正確地做了這件事。將ajax調用概括爲函數

<script> 
    $(document).ready(function(){ 
    var reg_no=$("#reg_no").val(); 
    reg_no=reg_no.trim(); 
    if(reg_no!==""){ 
     //populate fields 
     data={reg_no:reg_no,func:"getSupplierDetails"}; 
     success_function="updateFormFields"; 
     ajax_call(data,success_function); 
    } 
}); 

function ajax_call(data,success_function){ 
    $.ajax({ 
     type:"POST", 
     url:"../control/supplier-c.php", 
     dataType:"json", 
     data:data, 
     success:function(data){ 
      success_function(data); //variable function works?? 
     } 

    }); 
} 

function updateFormFields(data){ 
    //some code here to handle data array 
} 
</script> 

我在這裏要做的是避免重寫整個ajax代碼,通過傳遞數據數組和成功執行的函數。我不確定的是如我所做的那樣使用可變函數。

需要注意的是,如果updateFormFields()代碼被移入ajax調用中的成功處理程序並且ajax_call()沒有被定義爲單獨函數,而是在之後執行,那麼整個事件對ajax調用起作用評論「填充字段」。我只是沒有這方面的經驗,我需要知道這是否可行。

謝謝

+0

,如果你的問題是關於成功:回調,然後,將工作......不過,你可以做'成功:success_function'代替 –

+0

我明白了,我只是想找到一個避免重複輸入ajax_call()中的同一行代碼。我在我的網站有幾個AJAX調用 – user3889963

回答

2

在Javascript中,函數是第一類對象,這意味着您可以將它們作爲參數傳遞。

function json_post(url, data, success_function, error_function) { 
    $.ajax({ 
     type:"POST", 
     url:url, 
     dataType:"json", 
     data:data 
    }).then(success_function, error_function); 
} 

然後,你可以把它作爲

json_post("../control/supplier-c.php", { data: "data" }, function (res) { 
    console.log('Ajax req successful'); 
    console.log(res); 
}, function (res) { 
    console.log('Error in ajax req'); 
    console.log(res); 
}); 

在你的情況,你可以這樣做:

ajax_call(data, updateFormFields); 

,並預期它應該工作。

+0

你能否證實我的實施方式是錯誤的,如錯誤?不建議使用成功回調。因爲我的實施不起作用。 – user3889963

+0

是的,你的實現是錯誤的。在這裏檢查jquery ajax文檔。http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings for'success',提到'success'必須是一個函數,而不是一個字符串。 – Ananth

0

沒有必要包裝成功的功能,你可以直接申請應用它。

function ajax_call(data, success_function) { 
    $.ajax({ 
     ... 
     success: success_function 
    }); 
} 

一個更好的想法是爲了避免傳統successerror回調,而是返回jQuery承諾。您可以使用標準承諾方法.then()和`。

function ajax_call(data) { 
    return $.ajax({ 
     ... 
    }); 
} 

ajax_call() 
    .then(function(data) { 
     // this runs if it succeeds 
    }) 
    .fail(function(err) { 
     // this runs if it failed 
    }); 

承諾有一個巨大的好處是鏈能,使得代碼更平坦,避免「聖誕樹回調」的巢。

+0

但是在函數ajax_call(data,success_function)中,變量success_function是一個字符串。按照你說的寫作時,它會作爲一個函數執行嗎? – user3889963

0

我會推薦檢查success_function以及failure_function來處理服務器響應(XHR)錯誤。

function success_function(){ 
 
    //code to handle success callback 
 
} 
 

 
function error_function(){ 
 
    //code to handle failure callback 
 
} 
 

 
function ajax_call(data, success_function, error_function) { 
 

 
    if (typeof success_function === 'function' && typeof error_function === 'function') { 
 
    $.ajax({ 
 
     type: "POST", 
 
     url: "../control/supplier-c.php", 
 
     dataType: "json", 
 
     data: data, 
 
    }).then(success_function).fail(error_function); 
 
    } 
 
}