【发布时间】:2017-12-08 11:26:43
【问题描述】:
在进行注册时,我想立即检查电子邮件地址是否已与帐户关联。
因此,我使用 jQuery Validation Plugin 并向服务器发送同步 ajax 请求。效果很好。
为了测试在超时的情况下会发生什么,我为 ajax 请求选择了 5 毫秒的超时。在服务器端(php 文件)程序执行使用 sleep(5) 延迟 5 秒。
但是成功回调不是在 5 毫秒后收到超时错误,而是在 5 秒后从服务器返回正确的数据。
所以ajax超时参数似乎不起作用。
这是我的代码:
$.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.');
我已经用其他文章检查了几次代码,但无法找出问题所在。
有人有想法吗?
亨利
【问题讨论】:
-
只能认为超时不适用于
async: false,尽管这不是记录的功能。试试async: true。 -
无论如何,你都应该使用
async: true。 -
我必须使用异步:false。否则 jQueryValidate 插件不会得到正确的答案,即 bValidEmail 取决于来自服务器的信息。异步请求返回未定义的 bValidEmail。
-
你必须解决这个问题。总有办法。
-
与其编写自己的自定义方法,不如使用插件中已经内置的
remote方法?
标签: jquery ajax timeout jquery-validate