-4

関数で$.post()を使用して、postコールバックを強制的に返すにはどうすればよいですか?

例:

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

.done()と.queue()を使用して試してみましたが、どちらもうまくいきませんでした。私の例には根本的な欠陥があることを理解しています。そうは言っても、どうすれば目的の機能を実現できますか?

4

2 に答える 2

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 プレゼンテーションでは、そのメリットを非常に詳細に説明しています。

于 2011-07-29T18:21:51.793 に答える
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();
}
于 2012-08-29T14:51:53.793 に答える