登録を行う際に、メールアドレスが既にアカウントに関連付けられているかどうかをすぐに確認したいと思います。 したがって、jQuery検証プラグインを使用して、サーバーに同期ajaxリクエストを送信します。それはうまく動作します。
タイムアウトの場合に何が起こるかをテストするために、私はajaxリクエストに対して5msのタイムアウトを選択しました。サーバー側(php-file)では、プログラムの実行がsleep(5)を使って5秒遅れます。
5ms後にタイムアウトエラーが発生する代わりに、成功コールバックは5秒後にサーバーから正しいデータを返します。
したがって、ajax timeoutパラメータが機能していないようです。 これは私のコードです:jQuery: 'タイムアウト'エラーが表示されません。エラーコールバックが起動しません。
$.validator.addMethod('ist_ProvEmail_noch_frei',function(value, element) {
var bValidEmail;
var jqXHR = $.ajax({
url: 'ajax/IstProvEmailVergeben.php',
data: {
email: value
},
success : function(data, textStatus, jqXHR) {
console.log("success1: " + textStatus);
// some code
},
error : function(jqXHR, textStatus, errorThrown) {
console.log("textStatus1: " + textStatus + ", type: " + typeof textStatus);
// some code
bValidEmail = true; // to prevent jQueryValidation from showing an error message
},
method: "POST",
async: false,
timeout: 5, // 5 ms
dataType: 'json'
});
console.log("jqXHR.responseText: " + jqXHR.responseText);
return bValidEmail;
}, 'This email address is already associated with an account.');
は、私は他の記事でコード数回チェックしましたが、間違っているものを見つけることができません。
誰かがアイデアを持っていますか?
ヘンリー
は、タイムアウトは '非同期で動作していないことを考えるだけでことができます:false'を、これは文書化された機能ではありません。 'async:true'を試してください。 –
いずれにしても、常にasync:trueを使用するべきです。 –
私はasync:falseを使用する必要があります。それ以外の場合、jQueryValidateプラグインは正しい答えを得られません。つまり、bValidEmailはサーバーからの情報に依存します。非同期要求は、bValidEmailを未定義として返します。 – Henry