函数中的JQuery $ .post。等待回调以定义返回。

时间:2011-07-29 18:17:48

标签: javascript jquery jquery-callback

我如何在函数中使用$ .post(),强制回调帖子回调?

示例:

function myFunction(){
   $.post(postURL,mydata,function(data){
      return data; 
   });
}

我尝试使用.done()和.queue()来玩它但是它们都没有用。 我明白我的例子有一个根本的缺陷;话虽如此,我怎样才能实现我想要的功能?

2 个答案:

答案 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();
}