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."
我在 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."