问题 jquery pjax请求发送两次


我有一个rails应用程序,我继续得到一个奇怪的行为与pjax请求。当我查看我的开发日志时,我可以看到正在发出两个请求。第一个请求是pjax而下一个请求不是。结果页面仍然重新加载。

如果有人能帮助我,我感激不尽。


8582
2017-11-16 14:29


起源

我们需要看到的不只是对你的问题的稀疏解释。请发布一些相关的代码,日志文件或其他东西。 - Bojangles
我遇到了同样的问题。我有一个例子 在云计算上。分页和表格排序链接应该是pjax,但是使用firebug,您可以观察它们发出一个XHR请求,然后刷新整个页面。在那里运行的应用程序的源代码是 这里是GitHub 相关文件可能正在 grails.list.js - Rob Fletcher
使用Firebug我已经确定在我的情况下,pjax的默认成功处理程序无法使用我给出的片段选择器找到任何内容。看着 pjax代码 在这种情况下,它将执行整页刷新。我不清楚为什么选择器不工作,因为AJAX响应似乎很好并且选择器有效。 - Rob Fletcher


答案:


JQuery pjax插件有一个默认的错误处理程序,它只是重新加载目标页面。超时过去时会调用此错误处理程序,pjax设置得非常低。因此,如果您的请求时间过长,您将看到两个相同的请求。 pjax请求(可能设置了_pjax属性),后跟另一个非pjax请求。在浏览器中,您可能会看到整个页面重新加载。

我在我的情况中找到的一件事是,响应本身并没有那么长时间。但是,返回的HTML包含flash嵌入。我不确定pjax代码是否在加载flash嵌入之前或之后获得响应。

为了解决这个问题,我改变了我的PJax代码看起来像......

$.pjax({
        url: xhr.getResponseHeader('Location'),
        container: '#container',
        timeout: 4000 // pick a suitable timeout
      });

当然,这是直接调用pjax。如果您没有直接调用它,则必须找到类似的解决方案。


14
2017-12-12 17:57



救了我! :)它没有发送两个请求,只是取消第一个,然后重新加载..无论如何 - 完美的工作! - Andrey Popov


我也遇到过这个问题 - 看起来这是一个与浏览器缓存有关的问题。我注意到,如果我清除历史记录并缓存它会停止在Chrome中发生。我还没能解决它,但我想它与禁用浏览器缓存有关?


1
2017-12-07 21:23



原来我的问题是请求超时了。传递超时:pjax函数中的2000为我修复了它。我还发现在我的部分布局中有一个空的pjax容器。当我导航到该片段时,它在浏览器控制台中给出了一个错误。我能够通过在其中放置一个空的span元素来修复它。 - andrewajo