2015-12-13 186 views
0

我試圖在AJAX成功執行中添加一個可選的回調,但我似乎無法讓回調運行時,我希望它。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-condition在一起,我仍然會得到相同的輸出。

也是在這裏更好的方式來處理我的Ajax返回目前我的響應包裝在一個json對象。如果數據庫找不到對象,則必須在數組中放置'false'並將其轉換爲json對象,然後將其返回到ajax。

+0

記住AJAX是異步的。在你正在做的Ajax調用中嘗試'async:false'。 – krozaine

+0

請不要推薦'async:false' :) – guradio

回答

2

:原因,你有你的回調作爲字符串傳遞給你的函數

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然後thisIsACallBack功能你寫的someAjaxFunction名字不是字符串

U PDATE

,如果你有PARAMS傳遞給你的回調您的選擇是

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

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

JavaScript有很多方法可以如何通過回調取決於你的需要

+0

Ohhhhhhh謝謝。這會讓它更復雜一點。在我的實際代碼中,回調除了將一個數組放入其參數中。 –

+1

**更新**後檢查代碼我發佈另一種方式如何可以傳遞你的回調 – Armen

+0

哇謝謝一堆我會挑釁地嘗試這個。 –