2009-07-21 16 views
4

ヘルプが必要です!JqueryのAjaxでコードを完了した後に次の行を実行

私は関数内でajax呼び出しを実行しています。 Ajax呼び出しの結果は、関数の戻り値です。その結果は、WebサービスへのAJAX呼び出しから取得された後

function tabstrip() 
{  
     $.ajax({ 
        type: "POST", 
        url: "/WebService/MessageUnratedCount.asmx/GetMessageUnratedCount", 
        data: "{}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
        nUnratedCount=msg.d;    

        } 
       }); 
      return nUnratedCount;          
} 

nUnratedCount値を返さなければならない次のよう

コードです。しかし、その代わりに、Ajax呼び出しの実行前に返されます。 助けてもらえますか?

+0

ミニ - あなたは、これが同じ問題に遭遇し、あなたの質問を見つけた誰を助けるよう私たちはあなたのために働いていたものを知らせることができますが。 – redsquare

答えて

0

私はajax呼び出しがデフォルトでは非同期であると信じています。

非同期ブールデフォルト:jquery docsから デフォルトでは真、すべての要求は(すなわち、これはデフォルトでtrueに設定されている)、非同期に送信されます。同期要求が必要な場合は、このオプションをfalseに設定します。同期要求はブラウザーを一時的にロックし、要求がアクティブな間にアクションを無効にすることがあります。

redsquareで述べたように、実際にはこのオプションを使用するよりもリファクタリングが優れている可能性があります。これは、もちろんあなたの特定の要件に依存します...

8

デフォルトでは、ajaxリクエストは同期呼び出しではないので、関数は応答を待たずにすぐに戻ります。私が強く勧める1つの選択肢は、asynch:falseの設定です。

最良のオプションはあなたのコードの構造をリファクタリングし、要求が非同期モードで行われるように例えば

//calling code 
    tabstrip(yourCallbackFunction) 

    function tabstrip(callbackFn) 
    {  
      $.ajax({ 
         type: "POST", 
         url: "/WebService/MessageUnratedCount.asmx/GetMessageUnratedCount", 
         data: "{}", 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success: callbackFn 
        });          
    } 

    function yourCallbackFunction (data){ 
     //do something 
    } 
+0

皆さん、ありがとうございました。 –

+0

コールバック関数を記述することで問題は解決しました。ありがとう。 –

0

成功

に呼び出されるコールバックに渡すことです(と同期モードでは実行したくないのですが、要求が完了した時点でブラウザーがフリーズするため、要求が完了した時点を完全に知る方法がありません。

$.ajax({ 
    ... 
}); 
// "here" 

しかし要求と要求が背景で行われ、そしてあなたが「ここ」に達したときに終了していません。

Ajaxリクエストの「戻り値」を処理するには、success(またはcomplete、または任意のイベント)イベントにプラグインされた関数内ですべての作業を行う必要があります。代わりにちょうどnUnratedCountmsg.dを置く

は、この機能は実際にそれで動作するように持っている(HTMLドキュメントでそれを表示する、たとえば、またはあなたは、データのその部分にしても構わないと思っていたものは何でも)

0

Ajaxコールは非同期コールです。コールは実行されますが、コールの戻りを待たずに次の命令が解釈されます。

このような呼び出しを実行するには、 "async"変数を "false"に設定する必要があります。その結果、コードは呼び出し結果を待つ間に実行を停止します。

http://docs.jquery.com/Ajax/jQuery.ajax#options

この追加してみてください:

function tabstrip() 
{  
     $.ajax({ 
      async: "false" 
     }); 

     $.ajax({ 
        type: "POST", 
        url: "/WebService/MessageUnratedCount.asmx/GetMessageUnratedCount", 
        data: "{}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
        nUnratedCount=msg.d;    

        } 
       }); 

     $.ajax({ 
      async: "true" 
     }); 

     return nUnratedCount;          
} 
+0

uhm ..多分redsquareがリファクタリングする方が良いと言ったので、彼のソリューションはおそらくもっと "ajax way" – emas

関連する問題