JQuery POSTを使用するJavaScript関数は常に未定義を返します
-
05-07-2019 - |
質問
ここで何が起こっているのか分かりませんし、誰かが助けてくれることを望んでいました、私はただ行方不明になっているのは簡単なことだと確信しています。
JavaScript内にJQueryポストを含む関数があります。単なるテキストの投稿の結果を返し、変数に入れたいと思います。番号はポストから正しく返されますが、変数にそれを入れると、変数は「未定義」と表示されます。アイデアはありますか?
var total = GetTotalSize();
alert(total);
function GetTotalSize(){
var i = "";
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data){
i = data.toString();
return i;
});
}
解決
そのようにすることはできません。覚えておいて、「A」 AJAXの「非同期」を意味します。 $。post()
に提供するコールバック関数は、 GetTotalSize()
が実行されて戻った後、正常に実行されます。
これに対応するためにコードを再構築する必要があります。あなたのコードの残りの部分がどのように見えるかわからないので、私は私の推薦で具体的にすることはできませんが、ここに可能性があります。
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(data)
{
doSomethingWithTotalSize( data.toString() );
});
function doSomethingWithTotalSize( totalSize )
{
// whatever
}
他のヒント
ピーターは絶対に正しいですが、 async:false
を渡すことで、$。ajaxメソッドを強制的に同期的に動作させることができます。
問題は、コールバック関数の外部で i
を返すことです。基本的に i
を返すとき、その内容はまだ存在せず、サーバーがコールバック関数にデータを返すまで存在しません。
これを試してください
function GetTotalSize(callback) {
$.post("Handlers/GetTotal.ashx", {id : $("#hID").val()}, function(outputData) {
callback(outputData);
});
}
function DoSomething(data)
{
//....
}
GetTotalSize(DoSomething);
これは古い投稿であることがわかりましたが、解決策は success
ではなく complete:[delegate]
を使用することでした。これにより、 callback
が完了します。
所属していません StackOverflow