我如何在函数中使用$ .post(),强制回调帖子回调?
示例:
function myFunction(){
$.post(postURL,mydata,function(data){
return data;
});
}
我尝试使用.done()和.queue()来玩它但是它们都没有用。 我明白我的例子有一个根本的缺陷;话虽如此,我怎样才能实现我想要的功能?
答案 0 :(得分:6)
这是不可能的。 $ .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讨论了它在令人难以忍受的细节方面的优点。
答案 1 :(得分:0)
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();
}