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

Posted

技术标签:

【中文标题】jQuery 的 ajax 导致 FireFox 中的整个页面刷新【英文标题】:jQuery's ajax is causing a full page refresh in FireFox 【发布时间】:2010-10-05 10:42:18 【问题描述】:

我正在使用 jQuery 进行 ajax 调用。 ajax 调用在 IE 7 中运行良好,但 FireFox 3 在进行此调用时总是会刷新整页。 ajax 调用正在发布到 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 事件进行的。我试过了 return false; 在进行此 ajax 调用的方法中,但 FireFox 中的完全刷新仍在继续。

我尝试设置 async = true,但这似乎不起作用。 FireFox 只是继续运行,不会等待后端返回响应。 FireFox(在 js 中)实际上是在 ajax 调用中产生错误。正如您在上面看到的,错误函数已定义,并且在我设置 async = true 时触发。

【问题讨论】:

我会保持 async=true,然后从那里调试。你有安装 Firebug 吗?如果是这样,请打开 Firebug,然后单击“Net”选项卡,然后查看单击按钮时调用的内容。您应该看到对 Default.aspx/DoSomething 的请求以及正在传递的任何参数。看看那里有没有奇怪的地方。 【参考方案1】:

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

您可以尝试使用 try/catch 块包围潜在的问题区域。

或者你可以试试这个:

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

编辑:我还想补充一点,ajax 错误:处理程序仅捕获来自服务器的错误...例如 403 或 500。您仍应将 ajax 调用包装在 try/catch 中。

【讨论】:

event.preventDefault 成功了。我将 async 设置为 true 并添加了上述内容,现在一切似乎都正常了。 如果您可以在此处添加特定的代码示例,那就太好了。【参考方案2】:

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

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

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

【讨论】:

正是我想知道的。所以,如果其他人也有同样的想法,也许我并不太离谱;) 这解决了我的问题,感谢您的解决方案。在 Chrome 中运行良好,但在 FF 或 IE 中运行良好。 Chrome 的另一个 +1,尽管从技术上讲这是我的错 Chrome 处理得很好。 Chrome 似乎不再能很好地处理这个问题。【参考方案3】:

此外,如果您的输入是 type="submit"...您可以将其更改为 type="button"。然后它不是试图提交表单......只是做你的“点击”事件。

【讨论】:

这使我朝着正确的方向前进。我有一个没有特定类型的表单按钮。当我提交 ajax 调用时,它不断触发页面重新加载。将按钮类型设置为 type="button" role="button" 为我解决了这个问题 小心这种方法。如果按钮在表单上,​​用户仍然可以按 Enter 键,这似乎与按下提交按钮的效果相同。【参考方案4】:

这个调用是在点击事件中吗?如果是,请确保点击事件的结尾有一个“return false”。只是一个想法。我知道这很老套,但是,我想我还是要提一下。

否则,据我所知,您的电话看起来不错。

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于jQuery 的 ajax 导致 FireFox 中的整个页面刷新的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firefox 中解码来自 jQuery $.ajax 请求的 XML 响应

在 Firefox 的 jQuery $ajax 调用中使用 xhrFields: withCredentials: true 时的状态码 = 0

jQuery $.ajax(), $.post 在 Firefox 中将“OPTIONS”作为 REQUEST_METHOD 发送

Firefox 和 nodejs 的 jQuery Ajax POST 错误

请在 401 时帮助测试 Firefox jQuery ajax 中的 CORS 问题

jquery mobile 与 phonegap 404 ajax 错误。但在 Firefox、IE 中运行良好