2017-07-21 58 views
0

我已經用jQuery ajax調用了很多次,但在更新之前它會返回值。我GOOGLE了它,並嘗試了很多解決方案沒有人爲我工作,我總是得到未定義的值,因爲函數返回值之前,Ajax調用完成。任何幫助將感激,在jQuery ajax調用中返回undefined值承諾

這裏是我的代碼在控制檯上

$(document).ready(function() { 
    console.log(secondvalidation()); 
}); 

function onemorevalid() { 
    console.log("working"); 
    //this ajax call return 1 
    return jQuery.ajax({ 
    url: 'handler/email.php', 
    method: 'POST', 
    }); 

} 


function secondvalidation() { 
    onemorevalid1 = new onemorevalid(); 
    onemorevalid1.done(function(data) { 
    console.log("data " + data); 
    return data; 
    }); 
} 

輸出

working 
undefined 
data 1 

回答

1

你讓一個對象出來的方法。這從根本上是錯誤的。此外,如果您需要將ajax調用的值傳遞給之後調用的代碼,則可以將async:false添加到您的查詢中,以便代碼將等待ajax響應。

只要確保在文檔就緒函數中調用ajax方法後調用other_function()

所以,我認爲你需要的是這樣的:

$(document).ready(function(){ 
var requested_data; 


     var request = $.ajax({ 
     url:'handler/email.php', 
      method:'POST', 
      async:false, 
      dataType: 'text' 
    }); 

    request.done(function(data) { 
     console.log("data " + data); 
requested_data = data 
    }); 



function other_function(){ 
console.log("toing_toing: " + requested_data); 
} 
other_function(); 
    }); 

這裏的這段代碼的working example fiddle

請注意,還有其他方法可以達到此目的per this answerasync:false可能會導致您的腳本凍結,直到請求完成,因此如果請求花了很長時間纔會導致糟糕的UI體驗。

+0

如何我可以使用這個返回的數據在另一個函數 – Ganesh

+0

@Ganesh請檢查更新的答案 –

+0

謝謝@toing_toing,你的答案有用,但你正在使用「async:false」;它被棄用,我們可以做一些像你的答案,而不使用「async:false」; – Ganesh