Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ajax请求中的延迟处理_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript ajax请求中的延迟处理

Javascript ajax请求中的延迟处理,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是我必须解决的情况 页面中有两个视图 最初加载第一个视图 仅当用户单击第二个视图时,才会加载第二个视图的数据 问题: 用户单击第二个视图 ajax请求需要时间来响应 因此,用户返回到第一个视图 现在调用ajax请求的回调 用户当前处于第一个视图中,但内容属于第二个视图 我如何处理这种情况 有没有解决此类问题的通用方法,或者应该根据具体情况进行解决。因此,如果您理解正确,您有一个流程,您希望在两个视图中都看到该流程 你可以打个电话启动这个过程。通过文件系统/会话/数据库将somewehere设置

这是我必须解决的情况

  • 页面中有两个视图
  • 最初加载第一个视图
  • 仅当用户单击第二个视图时,才会加载第二个视图的数据
  • 问题:

  • 用户单击第二个视图
  • ajax请求需要时间来响应
  • 因此,用户返回到第一个视图
  • 现在调用ajax请求的回调
  • 用户当前处于第一个视图中,但内容属于第二个视图
  • 我如何处理这种情况


    有没有解决此类问题的通用方法,或者应该根据具体情况进行解决。

    因此,如果您理解正确,您有一个流程,您希望在两个视图中都看到该流程

    你可以打个电话启动这个过程。通过文件系统/会话/数据库将somewehere设置为当前状态(如果发生致命错误,您希望确保没有读访问锁定,并且具有时间戳以确保删除死数据)

    您的状态可以是整数:

    • 1:进程已启动
    • 2:第一种方法处理
    • 3:第三种处理方法
    • 4:完成
    您还可以为每个步骤编写一个
    输出文件/记录/会话

    在你每5000毫秒询问的2个视图中,服务器:你有什么东西给我吗?如果是,您将显示它

  • 在第二个视图中添加一个加载指示器,以便用户知道正在发生什么,并且他/她应该等待

  • 当从第二个视图返回第一个视图时,您始终可以中止AJAX请求。更多信息请点击此处:


  • jQuery ajax方法返回XMLHttpRequest对象,因此您可以只使用
    .abort()

    假设,这是对第二视图的ajax调用:

    view2_ajax = $.ajax({
        url: 'your_view2_url'
    });
    view2_ajax.done(function(result){
        // do something for success
    });
    view2_ajax.fail(function(result){
        // do something for fail
    });
    
    因此,当用户单击第一个视图时,只需调用
    view2\u ajax.abort()
    ,该ajax调用将被取消


    有关更多信息,请访问(jQuery API文档)。

    您可以使用一个隐藏gif图像来显示ajax内容正在加载。使用加载指示器?如果用户仍然继续并单击怎么办?那么这不是一个问题吗?@GauthamRenganathan在加载gif图像时,您可以通过在任何地方禁用点击屏幕来阻止用户在gif图像显示时进行第一次查看。如果您使用fancybox显示加载的gif,则可以通过将fancybox的modal属性设置为true作为modal:true来实现。@TusharDave:是否有任何问题另一种处理方法。因为我不想妨碍用户体验。现在用户已经切换了他的视图,我可以默默地忽略请求的回调吗?