我將如何在函數中使用$ .post()強制回調函數後回調?
例子:
function myFunction(){
$.post(postURL,mydata,function(data){
return data;
});
}
我曾嘗試使用.done玩了()和.queue(),但是他們都沒有爲我工作。 我知道我的例子中存在一個根本缺陷;與那個說,我怎麼能達到我想要的功能?
我將如何在函數中使用$ .post()強制回調函數後回調?
例子:
function myFunction(){
$.post(postURL,mydata,function(data){
return data;
});
}
我曾嘗試使用.done玩了()和.queue(),但是他們都沒有爲我工作。 我知道我的例子中存在一個根本缺陷;與那個說,我怎麼能達到我想要的功能?
這是不可能的。 $ .Ajax電話將立即返回。您需要在通過回調調用返回時處理返回(可能幾秒鐘後)。對於給定的調用,Javascript永遠不會阻塞。它可以幫助想你的代碼是這樣的:
//This entirely unrelated function will get called when the Ajax request completes
var whenItsDone = function(data) {
console.log("Got data " + data); //use the data to manipulate the page or other variables
return data; //the return here won't be utilized
}
function myFunction(){
$.post(postURL, mydata, whenItsDone);
}
如果你有興趣更多的收益(和缺點)JavaScript的無阻擋的,只有回調:此Node.js presentation討論了難以忍受的細節它的優點。
function myFunction(){
var deferred = new $.Deferred();
var request = $.ajax({
url: postURL,
data: mydata
});
// These can simply be chained to the previous line: $.ajax().done().fail()
request.done(function(data){ deferred.resolve(data) });
request.fail(function(){ deferred.reject.apply(deferred, arguments) });
// Return a Promise which we'll resolve after we get the async AJAX response.
return deferred.promise();
}
爲什麼你想這樣做?您需要使用回調函數來處理返回的數據。 –
並且在處理完所述數據之後,我需要傳回某些值。 – rlemon
您可能需要重構您的代碼,因爲沒有好的方法來執行此操作。 –