jQuery的ajax导致FireFox中的整页刷新

时间:2009-02-04 15:53:08

标签: asp.net jquery ajax firefox

我正在使用jQuery进行ajax调用。在IE 7中,ajax调用工作正常,但FireFox 3在进行此调用时始终会执行整页刷新。 ajax调用是POST到ASP.NET页面方法。

jQuery中是否存在问题,或者我只是缺少某些设置?

$.ajax({
  async: false,
  type: "POST",
  url: "Default.aspx/DoSomething",
  data: "{" + parms + "}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  cache: false,
  success: function(data) { succesfulPost(data); },
  error: function(XMLHttpRequest, textStatus, errorThrown) { 
    errorPost(textStatus, errorThrown);
  }
});

正在通过html按钮onclick事件进行调用。我试过了 正在进行此ajax调用的方法中return false;,但FireFox中的完全刷新仍在继续。

我尝试过设置async = true,但这似乎不起作用。 FireFox只是继续前进,不等待后端返回响应。 FireFox(在js中)实际上是在ajax调用中生成错误。如上所示,定义了错误函数,当我设置async = true时会触发此错误。

5 个答案:

答案 0 :(得分:12)

你是如何调用AJAX方法的?它可以像取消启动AJAX请求的事件一样简单,如果它也会导致表单上的提交。

<input type="submit" onclick="doAjaxSubmit();return false;" value="Update" />

添加“return false;”将导致典型的提交操作被取消。如果它来自文本框,那么您将需要将e.preventDefault添加到为执行AJAX而设置的keypress(或其他)处理程序的处理程序。

答案 1 :(得分:12)

return false就是你所需要的,但是如果你在点击该行之前发生了javascript错误,那么浏览器将继续愉快地执行链接点击或按钮点击事件。

您可以尝试使用try / catch块尝试环绕潜在问题区域。

或者你可以试试这个:

e.preventDefault作为处理程序中的第一个语句。这应该可以阻止默认事件的发生,我想你可以直接调用它......我只是没有尝试过。

编辑:我还想补充说ajax错误:处理程序只捕获来自服务器的错误......如403或500.你仍然应该在try / catch中包装ajax调用。

答案 2 :(得分:4)

另外,如果您输入的是type =“submit”...您可以将其更改为type =“button”。然后它不会尝试提交表单...仅执行“点击”事件。

答案 3 :(得分:1)

此次调用是否在点击事件中?如果是,请确保click事件的结尾具有“return false”。只是一个想法。我知道这很老套,但我认为无论如何我都会提到它。

否则,我的电话看起来很好。

答案 4 :(得分:1)

我使用Ajax与Firefox有类似的问题。我在表单标记中有几个输入元素。但是,即使我用按钮标签替换了我的标签,表单标签也会导致页面刷新。我用div替换了form标签,问题就消失了。

我也尝试了e.preventDefault(),如上所述。这也解决了这个问题,同时允许我继续使用表单标签。