2012-03-13 8 views
1

jQuery.postクラスを使用して、関数内の応答を返す(アラートしない)ことを望みます。jQuery Ajax Postを返す

以下が適切な値に警告を与える:

function test_func() { 
    $.post("test.php", { cmd: "testing" }, function (data) { alert(data); }) 
} 

(適切な値の警告表示)

私は次のことを試みた:

function test_func() { 
    return $.post("test.php", { cmd: "testing" }, function (data) { return data; }) 
} 

(返さオブジェクト)

function test_func() { 
    var tmp; 
    $.post("test.php", { cmd: "testing" }, function (data) { tmp=data; }) 
    return tmp; 
} 

(未定義返さ)

var tmp; 

function setTmp(n) { 
    tmp=n; 
} 

function test_func() { 
    t=$.post("test.php", { cmd: "testing" }, function (data) { setTmp(data); }) 
} 

(未定義返さ)

function test_func() { 
    t=$.post("test.php", { cmd: "testing" }) 
    return t.responseText; 
} 

は(未定義返さ)

ので、契約は何ですか? "test_func()"をデータレスポンステキストを返すにはどうすればよいですか?

答えて

0

契約はAjaxは一つの可能​​な解決策が唯一の他のよりよいがあるあなたの現在の設定を動作させるためにされて

$.ajaxSetup({ 
async:false 
}); 

、その後

function test_func() { 
var temp; 
    t=$.post("test.php", { cmd: "testing" }) 
    return t.responseText; 
} 

の答えのように同期として設定することで、非同期でありますそれに対処する方法

+0

恐ろしい、助けてくれてありがとう。これは啓発です。実装され、今すぐ動作します。 – Gaias

1

非同期要求では、関数を呼び出すとすぐに応答を取得できません。代わりに、$.postに渡すfunctionは、応答が完了するとすぐに何らかのアクションを実行するコールバックを意図しています。次の点を考慮

function myCallback(response) { 
    // do something with `response`... 
} 

function test_func() { 
    $.post("test.php", { cmd: "testing" }, myCallback) 
} 

代わりに直接応答を返すのmyCallback機能で必要に応じて、あなたの代わりにそれを操作することができます。