【问题标题】:Ajax post not working阿贾克斯帖子不起作用
【发布时间】:2012-07-22 19:23:52
【问题描述】:

我正在尝试通过 ajax 发布表单。它给了我“405 Method Not Allowed”错误。如果我将 url 放在 html 表单的操作部分并在单击按钮时手动提交(因此它不是 csrf 问题..rite?),则相同的 html 文件可以工作。

可能是什么问题?

【问题讨论】:

  • 你能把代码贴出来吗?
  • 您的网站将向您的表单添加一个 CSRF 隐藏字段,以便它们通过 CSRF 验证。做Ajax请求的时候,没有这些隐藏字段,所以失败。我只是寻找隐藏字段并获取它的值并将其添加到值列表中以作为帖子发送。
  • @Engineer — 同源策略不会导致 405 错误。
  • @Gavin — 除非设置为这样做,否则不会。无论如何,CSRF 应该抛出 403 而不是 405。
  • 这取决于底层站点的实现。如果它设置为抛出 405,它会。您的后端代码是 PHP 吗?您是否使用第三方框架,例如 CodeIgniter 或 DJango?

标签: html ajax csrf


【解决方案1】:

确保您对 ajax 请求使用相同的方法。 也许您正在为您的表单使用“POST”方法,为您的 ajax 请求使用“GET”方法。

CSRF 应该抛出 403,如果不允许使用 a 方法 (POST,GET,PUT,DELETE,...),您将看到 405 错误消息。

编辑:尝试使用 jquery 提交表单:

// change the selector!
var data = $("form").serialize();
alert(data);

$.ajax({
 type: "POST",
 url: "/your-backend.php",
 data: data,

});

当你这样做时,萤火虫会说什么?

【讨论】:

  • 不,我交叉检查了一下,它们是一样的。正如加文所说,隐藏的领域,如果它存在于形式中,就是原因。如何检索该隐藏字段?
  • 我使用了序列化方法,警告它,找不到任何包含 CSRF 令牌的字段。 firebug“405 Method Not Allowed”中仍然存在相同的错误
  • 您的表单有一个带有 csrf 令牌的字段?
  • 不,找不到任何带有 csrf 令牌的字段,使用 form.serialize 方法来检查。
猜你喜欢
  • 2015-01-13
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2018-07-04
相关资源
最近更新 更多