2017-05-31 134 views
-1

我使用一个工艺CMS网站一些简单的AJAX页面过渡,非常相似,这些指令:https://designbycosmic.com/journal/craft-cms-ajax-page-transitions-with-history-pushstateAJAX网址后返回400(错误的请求)

我的代码的基本结构是这样的:

$.ajax({ 
    type: 'POST', 
    url: href, 
    data: {}, 
    success: function(result){ 
    // hide old content, load new content, fade in new content 
    }, 
    error: function(){ 
    console.log("ajax error"); 
    } 
}); 

“href”是加载新页面的链接。

我总是得到400(错误请求)错误。

我使用这个完全相同的方法在一个类似的网站上完全相同的托管环境,它工作正常,所以我敲我的头,为什么这将是不同的行事。

有关此主题的所有其他答案似乎都适用于“数据”格式不正确的情况,但在您仅仅加载网址时没有解决问题,没有其他数据。

在这种情况下,什么会导致400错误?这里


UPDATE

OK是对任何人的现场直播是谁还跟进一步帮助调查:http://mearch.nz/

还是很完整,正在开发中。您应该能够在“主页”,“项目”和“项目”索引中链接的任何项目详细信息页面之间导航。您会看到加载指示符只是停留在那里,并且新页面不会到达,因为AJAX失败。

如果你重新加载任何这些页面,他们工作得很好。网址没有任何问题。出于某种原因,它只是不被接受为AJAX POST的正确数据。

现在作比较,这里是相同的虚拟主机上的其他网站,使用相同的AJAX功能,和同一个CMS,它工作正常:http://benek.nz/

+1

你您是否正在执行POST请求但未发送任何数据?您是否检查过Chrome DevTools以查看响应中是否包含任何其他信息? –

+1

您得到400响应的原因是因为**服务器**表示请求是坏的(因此是错误的请求) - 客户端代码很少会告诉你为什么服务器正在响应 - 你需要修复服务器,或者如果你不控制服务器,你需要了解服务器的期望,并让你的请求符合服务器要求@JaromandaX的回忆 –

+0

这就是为什么这对我来说如此令人沮丧。它与另一个具有几乎完全相同的代码的网站位于同一服务器环境中,并且工作正常所以据我所知这应该是服务器的期望。 –

回答

1

的http:// mearch.nz/projects/ 不参考 http:// mearch.nz/js/init.js。但是init.js需要加载,因为它包含你的javascript代码! 相反http://benek.nz做参考init.js因此它的工作原理。

看起来像你在http:// mearch.nz上使用minmee,因此调试你的问题有点困难。

看来您的请求有一个CSRF-组织。这通常发生在JavaScript向Web服务器发送请求时,这与JavaScript的来源不同。

这是我做过什么重现您的问题:

  • 导航到http://mearch.nz/projects/
  • 点击链接“项目”
  • 在谷歌浏览器:在控制台窗口中写道:” ...400(错误请求)”
  • 在谷歌Chrome浏览器在网络选项卡下的响应我看到服务器还发送HTML containin文本‘错误的请求’和‘CSRF令牌无法核实。’
+0

init.js没有问题,因为在这个新站点上它只是minimee压缩文件的一部分。 CSRF问题是问题!看起来Craft已经改变了默认设置 - 默认情况下CSRF被禁用,但现在启用了CMS安装文件的更新更新。这就解释了为什么它在这个网站上的表现与其他网站相比有所不同。非常感谢你的帮助 - 这个线索足以让我把它整理出来。 –