在提交表单按钮之前,我做了一个$ .getJSON调用来验证一些数据,当它返回时,它会显示一个“你没有正确填写这个表单”的对话框或者表单。提交()。但有时候,特别是在我的慢速测试服务器上,在回调被调用之前需要几秒钟,所以我想提出一些按下按钮的可视指示(禁用按钮,等待游标等),以及然后关闭回调中的视觉指示。但我被告知,可能不会调用回调的机会很小但非零。如何防止getJSON未调用回调?
确保在这种情况下,我最终不会得到非功能性表单的最佳做法是什么?
在提交表单按钮之前,我做了一个$ .getJSON调用来验证一些数据,当它返回时,它会显示一个“你没有正确填写这个表单”的对话框或者表单。提交()。但有时候,特别是在我的慢速测试服务器上,在回调被调用之前需要几秒钟,所以我想提出一些按下按钮的可视指示(禁用按钮,等待游标等),以及然后关闭回调中的视觉指示。但我被告知,可能不会调用回调的机会很小但非零。如何防止getJSON未调用回调?
确保在这种情况下,我最终不会得到非功能性表单的最佳做法是什么?
除了.success
回调代替$.getJSON
之外,您还可以使用和.error
回调。如果请求失败,.error
回调将触发。您可以使用它重新启用并显示合适的消息,类似于投票失败时在StackOverflow上显示的消息。例如:
$.ajax({
url: "test.html",
dataType: "json",
success: function(html){
$form.submit();
},
error: function(xhr, error){
console.debug(xhr);
console.debug(error);
$form.find(":input").attr("disabled", false);
}
});
我推广这种方法。还有一个可以为请求设置的超时选项,这样当它需要更长的时间然后x秒时,它会调用错误回调,这就是为什么上面的'setTimeout'方法是多余的。 – mekwall 2011-05-24 14:58:01
您可以添加另一个涉及['.ajaxSetup'](http://api.jquery.com/jQuery.ajaxSetup/)和全局错误回调的解决方案。我会自己做,但我觉得这个答案已经足够了,所以我不需要第三个答案来竞争*,也不想在未经您的同意的情况下编辑您的答案;) – mekwall 2011-05-24 15:00:56
@Marcus Ekwall - 做我的客人,编辑走了。真的不需要我的同意,但我很欣赏你的礼貌:) – karim79 2011-05-24 15:07:05
我只是使用超时。确保enableForm()仅在表单已启用时返回,并在表单被禁用时清除超时以避免运行多个计时器。
setTimeout(enableForm,10000); //在10秒后启用任何形式的表单
你可以看看这里http://api.jquery.com/jQuery.getJSON/中的jqXHR对象部分,它解释该函数$ .getJSON()返回一个实现的XMLHTTPRequest所以你将不得不使用.error,.success和.complete的jqXHR对象
我认为这将工作你的情况:
$.getJSON("a.json", function() {}).error(function() {})
jQuery的哪个版本您使用的? – mekwall 2011-05-24 14:03:44
jQuery 1.4。 (大部分我们的一些页面仍然使用1.3) – 2011-05-24 14:34:41