响应jquery请求时遇到304错误

时间:2015-07-03 01:05:01

标签: jquery ruby-on-rails ajax

情景:

  1. 用户访问页面

  2. Jquery开始向ajax请求后端代码

  3. 导航到页面(不刷新)我可以看到请求仍然从客户端发送到服务器。它现在应该停止了。
  4. 当用户再次返回同一页面时,请求应该开始点击,但它正在抛出304 error。 Jquery应该再次点击请求。
  5. 用户点击以下button代码

    index.html.erb

    <td colspan="3"><%= link_to 'Show state', simulation, :class => 'btn btn-primary' %></td>
    

    将导航至

    show.html.erb

    我在这里写了jquery代码来制作Ajax请求

    <script>
    $(function() {setInterval(function(){ $.get("/posts/<%= @post.id %>"); }, 5000);
    });
    

    Dom needed to be changes after every `Ajax` response in same views (show.html.erb)
    
    <span id="post-data">
      <table class = 'table table-hover'>
         .....
      </table>
    </span>
    

    用于渲染视图的js文件

    show.js.erb中的

    $("#post-data").html(" <table> ... </table>") 
    

    如何修复这些错误。任何帮助都是可以理解的,我不是核心的javascript

    我在找什么?

    • 当用户导航到其他页面时(通过单击后退按钮)停止jquery事件的方法
    • 即使用户返回页面也可以启动jquery的方法。

1 个答案:

答案 0 :(得分:2)

当它第二次发送时,它将从浏览器返回缓存的内容,  因为它应符合规范:

  

对于由用户代理导致的304 Not Modified响应   生成的条件请求用户代理必须像服务器一样   给出了200 OK的适当内容回复。

jQuery不会在这里生成任何回复。而304-header只是一个HTTP头。 HTTP AJAX请求是普通的HTTP请求,可能会返回任何有效的标头。如果服务器以304响应,则XHR对象将仅提供来自服务器的本地缓存响应。不过,它对用户来说完全透明。

您可以在ajax请求中使用cache参数,然后它可以工作:

   $.ajax({
         url: ".....",
         dataType: "json",
         type: "GET",
         cache: false,
         contentType: "application/json",
         success: function (data, textStatus) {
            console.log("RECV: " + data);
         }
      });