2012-03-01 5 views
0

を掛けることなく、完了を待つアヤックス:呼び出されているサーバー上の

function CallWebServiceToUpdateSessionUser(target, user) 
{ 
    var dataText = { "jsonUser": JSON.stringify(user) }; 

    $.ajax({ 
     type: "POST", 
     url: target, 
     data: JSON.stringify(dataText), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) 
     { 
      return true; 
     }, 
     failure: function (msg) 
     { 
      return false; 
     } 
    }); 
} 

とターゲット関数が取ることができ〜15秒間応答します。

は、サーバコールが完了するまでを終了しないことをどのように保証しますか?または、この関数を呼び出す人がtrue/falseを取得し、未定義ではないことをどうすれば保証できますか?

注: 私が見た人は、非同期使用:偽それは、私はしたくないUIをハングアップします。

+0

.ajax()はデフォルトでは非同期で、asyncをfalseに設定しない限り、ブラウザをハングしません。コンソールでのデバッグでは何が表示されますか?ところで、あなたは、呼び出しが完了するまで機能を終了させないように頼んであなたの自己と矛盾しているように見えますが、あなたは待っていないと言います。どちらですか? – j08691

+1

UIをハングすることなく、サーバーが応答するまでブラウザーを止めたいとします。それは矛盾です。 ブラウザがあなたの機能に邪魔されている間は、何も処理できません。 –

+0

なぜ機能を終了したくないのですか? UIスレッドをもう一度解放するためには、これがまさにあなたが欲しいものです。 「ローディング」メッセージをポップアップしてから、サーバーから応答を受け取ったら作業を再開するだけです。ユーザーが応答を取り消す可能性がある(または少なくとも結果を無視する)可能性があります。 –

答えて

2

http://api.jquery.com/jQuery.ajax/を参照してください。パラメータにasync: trueのAJAXリクエストを行う必要があります。 successful要求後に実行されるコードがsuccessfulブロック内に入るようにコードを編集する必要があります。

+0

asyncはデフォルトでtrueです – j08691

+0

この例にあるコードは、サーバー側の関数が戻るのを待機していないため、undefinedで終了します。続行するにはサーバから値を受け取る必要があります – Miles

+0

asynchを使用したい場合は、間違った方法で近づいています。変数を設定する別の方法を理解する必要があります。可能なアプローチの1つは、関数呼び出しの後にすべてのコードを成功ブロック内に置くことです。現時点では、非同期で必要な方法でコード機能を持たせる方法はありません。 – Bot

関連する問題