0

ボタンがクリックされたときに、フォームが送信される前にフォームの接続チェックを実行しようとしています。アイデアは、このコードではまだ実装されていない Timeout リクエスト "Timeout()..." を調べ、接続が見つかるまで Ajax を反復し続けることです。接続が見つかると、ユーザーに警告が表示され、送信を押した後に切断された接続があった場合は正常に送信されます。これが私がこれまでに持っているものです:

function upload_prepformDiff() {
$.ajax({
        type: 'POST',
        url: './php/upload_prepform.php',
        timeout: 2000, //2 seconds, for testing purposes
        data: prepform,
        async: false,//Omitted now as of this post
        dataType: 'text',
        success: function() {
            alert("Your Prep form has been submitted.");
            window.top.location.replace('./');
        },

        error: function (xhr, status, error) {
            if(status == "timeout") {
                alert("Internet connection has been lost! Please wait until you are notified and do not continue.");
            } else {
                alert(status + " " + error);
            }
        }
});
};

問題は、タイムアウト値が低くても、「タイムアウト」ステータス メッセージが表示されず、「エラー」が表示されることです。したがって、必要なタイムアウトエラーがスローされることはなく、次のエラーが発生します: Error: NETWORK_ERR: XMLHttpRequest Exception 101

したがって、ajaxは接続がないことに気づきますが、それはerrorThrownが示すものであり、textStatusはそれぞれ(xhr、status、error)の「エラー」です。だから私が試したのは、少し即興で行い、Ajaxでスローされたエラー文字列を何らかのタイプのerror.indexOf()で処理することでしたが、それは機能せず、error.contains("NETWORK_ERR")または任意のタイプの正規表現コマンド。これを改善するためのアイデア、またはタイムアウトが発生しない理由はありますか? ありがとう!

4

1 に答える 1

2

これはあなたにとって少し遅いかもしれませんが、それでも...

指定した場合

「false」として非同期

、timeout プロパティは無視されます。

エラーの処理については、以前の SO の質問: status of ajax または post request にアクセスしてください。

お役に立てれば!:)

于 2013-12-09T03:39:42.007 に答える