6

ajax は初めてなので、非常に基本的な質問をします。

-- タイムアウトを設定して同期 ajax 呼び出し (async:false) を行う方法はありませんか?

http://www.ajaxtoolbox.com/request/

私のアプリケーションでは、タイムアウトは非同期呼び出しで完全に機能しますが、特定のシナリオでは、同期呼び出しが必要です (JavaScript は実際にはサーバーから応答があるまで待機する必要があります)。これも正常に機能します。しかし、サーバーに時間がかかり、ajax タイムアウトが呼び出される可能性があるシナリオを処理する必要があります。

私が参照できる ajax の標準ドキュメントは他にありますか?

ありがとう

4

2 に答える 2

2

基本的に、同期 ajax リクエスト中はブラウザがブロックされ、ブラウザがブロックされている間は JavaScript を実行できません。このため、jQuery は javascript であり、ブラウザーがブロックされている間は javascript を実行できないため、設定されたタイムアウト後に jQuery は ajax 要求を中止できません。これは、同期 ajax の主要な欠陥です。

同期リクエストが必要な場合はいつでも、以下に示すように、コールバックで後で何が起こるかを指定して、代わりに非同期リクエストを使用する必要があります。

$.ajax({
    url : 'webservices.php',
    timeout: 200,
    dataType : 'json',
    data : {
        'cmd' : 'ping',
    },
    success : function(data, textStatus) {
        $.ajax({
            url : 'webservices.php',
            async: false,
            dataType : 'json',
            data : {
                'cmd' : 'feedback',
                'data' : data,
                'userinfo' : window.dsuser
            },
            success : function(data, textStatus) {
                // success!
                Status("Thanks for the feedback, "
                    + window.dsuser.user + "!");
            }
        });
    },
    error : function(jqhdr, textStatus,
                     errorThrown) {
        Status("There was trouble sending your feedback. Please try again later");
    }
});
于 2016-03-15T10:16:03.110 に答える
1

同期呼び出しにタイムアウトを設定することはできないと思います。「async:false」を設定すると、応答を待っている間にブラウザが実際にロックされると思います。どうしても必要な場合にのみ同期リクエストを使用する必要があります(ブラウザがロックするため)。

于 2010-02-03T20:45:39.757 に答える