関数で$.post()を使用して、postコールバックを強制的に返すにはどうすればよいですか?
例:
function myFunction(){
$.post(postURL,mydata,function(data){
return data;
});
}
.done()と.queue()を使用して試してみましたが、どちらもうまくいきませんでした。私の例には根本的な欠陥があることを理解しています。そうは言っても、どうすれば目的の機能を実現できますか?
関数で$.post()を使用して、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 プレゼンテーションでは、そのメリットを非常に詳細に説明しています。
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();
}