2011-07-06 7 views
0

AJAX応答)を待っている)と、JSON文字列受信:私はShowData(と呼ばれる機能を持っている

function GetRequest(ThePage) { 

RequestedPage = parseInt(ThePageNumber,10); 

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "../Pages/MyPage.aspx/GetPage", 
    data: "{'ThePage':'" + ThePageNumber + "'}", 
    dataType: "json", 
    success: function (msg) { 
     var data = msg.hasOwnProperty("d") ? msg.d : msg; 
     OnSucessCallBack(data); 
    }, 
    error: function (xhr, status, error) { 
     alert(xhr.statusText); 
    } 
}); 

}; 

)を呼び出しをGetRequest()を呼び出し、続行する前にGetRequestがデータを受け取るまで待つ必要があります。

function ShowData() { 

//some code that determines the page number 

GetRequest(ThePageNumber); 

//wait until the data is in 

}; 

私はいくつかの場所でGetRequestを使用するので、私はShowDataのコンテキストでsuccess関数を使用できません。

私の関数ShowDataはGetRequestが終了するまでその実行を一時停止しますか?私はOnSuccessCallBack関数を変更し、どの関数が最初にGetRequest()を呼び出すのかを考えましたが、これを最善に行う方法についてはわかりません。

ご意見ありがとうございます。

function ShowData() { 
    //some code that determines the page number 
    $.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
     options.async = false; 
    }); 

    GetRequest(ThePageNumber); 
    //wait until the data is in 
}; 

答えて

1

通過中のGetRequestにそれほどのような機能を追加します。あなたはAJAXプレフィルターを使用することによってのみ、同期、あなたの電話をかけることができ

$.ajax({ 
    type: "POST", 
    async:false, 
    . 
    . 
    . 
}); 
+0

OK、アイデアありがとう:説明したように、GetRequest関数にパラメータを追加した後、適切な関数にリダイレクトしました。 – frenchie

1

パスAJAXのオプションと一緒にasync:false ..:

function GetRequest(pageNumber, successCallback){ 

    //I admit this isn't "elegant" but it's most assuredly readable 
    var callback; 
    if (successCallback == null) { 
    callback = //default callback definition here 
    } else { 
    callback = successCallback; 
    } 

    //do everything else the same here 
    //except use the callback defined above 
} 

これにより、別のコールバックハンドラonsuccessの場合

上記と同じことを行いますが、返されたデータを具体的に必要としない限り、 "onComplete"ハンドラを使用してください(実際には表示されません)。

私は、あなたが同期要求で靴ひもを使用しようとするのではなく、非同期コードのコールバックを使用することを強く提案します。 javascriptで作業するときに非同期要求を中心に扱うコーディングスタイルを採用する方がはるかに優れています。特にAJAXを既に行っている場合(定義上は非同期にすることを意図しています)。

+0

これは実行可能ですが、これは素晴らしいアイデアではありませんが、私はあなたが認識していると確信しています。 – jcolebrand

+0

@jcolebrand:私は完全に同意します。しかし、GetRequest関数がすでにたくさんのページで参照されているので、これは最も抵抗力のないパスです。 – Chandu

+0

私は、その点がOPのために指摘されたことを確認したかったのです。 – jcolebrand

関連する問題