AJAX post url 返回 400(错误请求)

AJAX post url returning 400 (bad request)

我在 Craft CMS 站点上使用一些简单的 AJAX 页面转换,与这些说明非常相似:https://designbycosmic.com/journal/craft-cms-ajax-page-transitions-with-history-pushstate

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

$.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" 是 link 要加载的新页面。

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

我对完全相同的托管环境中的类似网站使用了完全相同的方法,而且效果很好,所以我很想知道为什么这会有所不同。

关于此主题的所有其他答案似乎都是针对 "data" 格式不正确的情况,但 none 解决了您仅加载 URL 时的问题,没有其他数据。

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


更新

好的,这里是任何愿意帮助进一步调查的人的实时网站:http://mearch.nz/

仍然很不完整,正在开发中。您应该能够在“主页”、“项目”以及从“项目”索引中 link 编辑的任何项目详细信息页面之间导航。您会看到加载指示器卡在那里,新页面永远不会到达,因为 AJAX 失败。

如果您重新加载这些页面中的任何一个,它们都可以正常工作。 URL 没问题。由于某种原因,它只是不被接受为 AJAX POST.

的正确数据

现在进行比较,这是同一虚拟主机上的另一个网站,使用相同的 AJAX 功能和相同的 CMS,并且运行良好:http://benek.nz/

http:// mearch.nz/projects/ 不引用 http:// mearch.nz/js/init.js。但是 init.js 需要加载,因为它包含您的 javascript 代码! 相反 http://benek.nz 引用 init.js 因此有效。

您似乎在 http:// mearch.nz 上使用了 minmee,因此调试您的问题有点困难。

您的请求似乎存在 CSRF 问题。如果 javascript 向网络服务器发送请求,这通常会发生,这与 javascript 的来源不同。

这就是我为重现您的问题所做的工作:

  • 导航到 http://mearch.nz/projects/
  • 点击了 link "projects"
  • 在 Google Chrome 中:控制台 window 写入“... 400(错误请求)”
  • 在 Google Chrome 的网络选项卡中,在响应下我看到服务器还发送了 HTML 包含文本 "Bad Request" 和 "The CSRF token could not be verified."