簡體   English   中英

AJAX內部回調成功

[英]Callback inside AJAX success

我試圖在AJAX成功執行過程中添加一個可選的回調,但是我似乎無法讓該回調在需要時運行。

這是我的AJAX代碼示例

function someAjaxFunction(hosturl, callback){
    $.ajax({
        type: "GET",
        url: hosturl,
        data: {'something': 'code' },
        dataType: 'json',
        success: function(html){                       
            var arr = $.map(html, function(val) { return val; });
            if(arr[0] != 'false'){
                console.log('1');
                console.log('2');
                if (callback) {
                    console.log('calling the callback')
                    callback();
                }
                console.log('3');
            }else{
               console.log('fail') 
            }   
        }
    });
}

這是如何執行AJAX的回調和示例

function thisIsACallBack(){
    console.log("i'm a callback");
}

someAjaxFunction("some url", thisIsACallBack);

如果運行此代碼,則控制台輸出。

1
2
3
i'm a callback

我什至可以一起刪除回調if條件,我仍然會得到相同的輸出。

這也是處理我的Ajax返回的更好的方法,當前我的響應包裝在json對象中。 如果數據庫找不到對象,那么我必須在數組中放置“ false”並將其轉換為json對象,然后再將其回傳給ajax。

因為您必須將回調作為字符串傳遞給函數

someAjaxFunction("some url", thisIsACallBack); // <-- Wrong thisIsACallBack will be triggered after someAjaxFunction as some separate function call

像這樣

someAjaxFunction("some url", "thisIsACallBack()"); // <- Correct way

// Then call eval( callback ); inside Ajax success
....
success: function(html){  
       ...
       eval( callback );
}

您的問題是,在此代碼的情況下someAjaxFunction("some url", thisIsACallBack); 它在您編寫someAjaxFunction名稱而不是字符串時觸發了someAjaxFunction然后是thisIsACallBack函數

更新

如果您必須將參數傳遞給回調,則可以選擇

someAjaxFunction("some url", function(param1){ 
    thisIsACallBack(param1) 
); } );

...
success: function(html){  
       ...
       callback( yourArray );
}

JavaScript有多種方式可以傳遞回調取決於您的需要

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM