【问题标题】:How to cancel an ajax request in Django when new page is requested请求新页面时如何在Django中取消ajax请求
【发布时间】:2012-01-25 15:19:27
【问题描述】:

在我的网页(建立在 Django 平台上)中,我有一些通过 ajax 请求请求服务器数据的 jQuery。在ajax请求响应之前点击离开页面,如何防止错误函数执行。

这是我的 jQuery 调用:

$(document).ready(function() {
 $.ajax( {
    url:'/server/url/',
    type: 'POST',
    data: {some..data},
    success:function(response) { do stuff with response },
    error: function() {alert('error')}
});

当我点击离开页面(到新页面)时,如何防止警报发生?

【问题讨论】:

  • 或许可以看看this 的回答来获得一些灵感

标签: jquery ajax django


【解决方案1】:

定义一个全局变量:

var ajaxcancel = false;

不,如果用户关闭窗口,您需要创建 true

$(window).bind("beforeunload", function() {
    ajaxcancel = true;
});

并更改 ajax 错误行以首先检查该变量的值:

...
error: function() {if (!ajaxcancel) alert('error'); }
...

【讨论】:

  • 我可以在 $(window).unload(function() {}); 中调用 xhr.abort() 吗?
  • 首先让我们更正我的代码;你最好不要在这里使用卸载事件功能(it's very browser-dependent)。相反,您可以将beforeunload 事件绑定到您的窗口(并且不要在该函数中返回任何内容)。在 jqXHR 中止时,我尝试使用 Firefox,但它仍然引发了错误。顺便说一句,有人请否决我并使我的分数为 0...
  • @Hossein:您可以直接删除答案,或者编辑它以使其正确。
【解决方案2】:

您无法取消已发送的 AJAX 请求,但您可以做的(我认为这可能适用于您的情况)是在离开发出请求的页面时,您可以发出另一个 AJAX 请求以取消之前启动的操作通过最初的 AJAX 请求。如果您发出的 AJAX 请求在您的服务器端开始一些昂贵的报告或数据库或算法操作,这可能会对您的情况有所帮助。

至少你可以让服务器知道不要再浪费任何资源,因为用户已经离开了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2012-01-10
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多