【问题标题】:Ajax user notification when the status is success状态为成功时的 Ajax 用户通知
【发布时间】:2016-05-19 07:50:13
【问题描述】:

我在 django 项目中工作,我用 celery 执行后台任务,用户看不到,我有一个类似这样的 url 来检查任务的状态,

'/tasks/3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd/status/'

形成这个我得到像

这样的 json 响应

任务运行时:

{
    "task": {
        "status": "PENDING", 
        "result": null, 
        "id": "3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd"
    }
}

任务完成时:

{
    "task": {
        "status": "SUCCESS", 
        "result": null, 
        "id": "3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd"
    }
}

我想使用 AJAX 并继续检查状态,如果状态更改为“成功”,则从上面的 json 中我需要通知或页面中的一些消息来通知用户任务已成功完成(例如在 facebook 或 twitter 中),如果关闭并打开浏览器,通知应该保留在那里,直到用户点击它。,我对 ajax 很陌生,任何人都可以帮我实现这一点。如何在 ajax 调用中执行此操作。如果我的方法错误,请指导我以正确的方式,如果有任何其他方法可以实现这一点,请建议我。提前谢谢。

【问题讨论】:

    标签: jquery ajax push-notification


    【解决方案1】:

    您可以使用setTimeout() 来轮询您拥有的网址并等待SUCCESS 状态,如下所示:

    function checkTaskStatus() {
        $.ajax({
            url: '/tasks/3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd/status/',
            success: function(json) {
                if (json.task.status == 'SUCCESS') {
                    // show a message to the user
                } else {
                    setTimeout(checkTaskStatus, 10000); // try again in 10 seconds
                }
            }
        });
    }
    
    checkTaskStatus(); // check on load of the page
    

    【讨论】:

    • 你不应该总是轮询......无论是成功还是错误。在此示例中,如果由于任何原因响应是错误的。不会进行下一次投票。
    • 这真的取决于你的服务器。通常,如果您收到错误响应,我不会再次轮询,因为您最终可能会用请求淹没服务器,如果它已经没有响应,这只会使问题更加复杂。您可以在预设数量的错误后添加一些容差来停止请求,但我将把它留给 OP 来实现,因为这只是添加计数器和 fail 处理程序的情况 - 假设它甚至需要这个案例。
    • 嗯...我明白你想说什么。但至少可以进行第二次调用,比如第一次是否超时。
    【解决方案2】:

    $(document).ready(function(){ setInterval(ajaxcall, 1000); //每1000微秒调用一次ajaxcall });

    函数 ajaxcall(){ $.ajax({ 网址:'/tasks/3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd/status/', 成功:函数(json){ 如果(json.task.status == 'SUCCESS'){ // 向用户显示一条消息 } } }); }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多