1

非同期 ajax リクエストの前に関数を実行しようとしています。ただし、非同期リクエストが応答を取得した後に関数が実行されます。

この問題を解決する方法はありますか?

block();

ajaxRequest= $.ajax({
    url: siteURL+'includes/ajax/action.php',
    type: "POST",
    async: false,
    data: {productID : productID},
    dataType: "json"
});
ajaxRequest.done(function(data) {
            block(true);
            if (data === false) {
                alerts('error title','error info here', 'error', 200);
                return false;
            }
});
ajaxRequest.fail(function(jqXHR, textStatus) {block(true); alerts('error title','error info','error');});
confirm();

これらのコードの後に​​、さらに関数を実行します。ただし、前に述べたように、block();関数は async ajax リクエストが応答を受け取るまで待機しています。

非同期で実行しないblock()と、 とconfirm()関数が同時に実行されるためreturn false;、すべての意味が失われます。

PSフォームが送信されたときにこれらのコードを実行するため、非同期リクエストが失敗した場合、その後に他のコードを実行したくありません。ただし、非同期で実行されている場合はblock()、応答が返されるまで待機しています。

4

1 に答える 1

4

あなたの問題はasync:false. あなたのリクエストは非同期リクエストではなく、同期リクエストです。リクエストの処理中に JavaScript コードとブラウザのレンダリングがブロックされます。現在の設定では、削除しても問題はなくasync: false,、非同期になります。

block();

ajaxRequest= $.ajax({
    url: siteURL+'includes/ajax/action.php',
    type: "POST",
    data: {productID : productID},
    dataType: "json"
});
ajaxRequest.done(function(data) {
            block(true);
            if (data === false) {
                alerts('error title','error info here', 'error', 200);
                return false;
            }
});
ajaxRequest.fail(function(jqXHR, textStatus) {block(true); alerts('error title','error info','error');});
ajaxRequest.always(confirm);
于 2012-10-12T19:49:20.280 に答える