如何防止getJSON不调用回调?

问题描述

| 在提交表单按钮之前,我进行了一个$ .getJSON调用以验证一些数据,当它返回时,它显示一个“您未正确填写此表单”对话框,或者它执行该表单。提交()。但是有时候,尤其是在我的慢速测试服务器上,调用回调要花费几秒钟的时间,因此我想展示一些您按下按钮的视觉指示(禁用的按钮,等待的光标等),然后在回调中关闭该视觉指示。但有人告诉我,回调可能不会被调用的可能性很小,但非零。 确保在那种情况下我不会出现非功能性形式的最佳实践是什么?     

解决方法

除了
.success
回调(而不是
$.getJSON
)之外,您还可以将
$.ajax
.error
回调一起使用。如果请求失败,将触发“ 1”回调。您可以使用它来重新启用并显示合适的消息,类似于投票失败时在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);
  }
});
    ,我只是使用超时。确保enableForm()仅在表单已启用的情况下返回,并在禁用表单时清除超时,以避免运行多个计时器。 setTimeout(enableForm,10000); //在10秒后无论如何启用表格     ,您可以在jqXHR Object部分的http://api.jquery.com/jQuery.getJSON/中查看它,它说明函数$ .getJSON()返回实现XMLHTTPRequest的jqXHR Object,因此您将可以使用.error,。成功与完成 我认为这将适合您的情况:
$.getJSON(\"a.json\",function() {}).error(function() {})