2011-07-29 2 views
-4

関数で$ .post()を使用すると、ポストコールバックで強制的にリターンしますか?

例:

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

私はの.doneを使用して、それで遊んで試してみました()と.queue()しかし、どちらも私のために働いています。 私は、私の例に根本的な欠陥があることを理解しています。それでは、私の望む機能をどのように達成することができますか?

+0

なぜこのようにしたいのですか?返されたデータを処理するコールバック関数を使用する必要があります。 –

+0

このデータが処理された後、ある値を返す必要があります。 – rlemon

+1

これを行う良い方法がないので、コードをリファクタリングする必要があるかもしれません。 –

答えて

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は耐え難いほど詳細にそのメリットを説明します。

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(); 
} 
関連する問題