質問

ここで何が起こっているのか分かりませんし、誰かが助けてくれることを望んでいました、私はただ行方不明になっているのは簡単なことだと確信しています。

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 が完了します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top