【问题标题】:XMLHttpRequest cannot load url. Method DELETE is not allowed by Access-Control-Allow-MethodsXMLHttpRequest 无法加载 url。 Access-Control-Allow-Methods 不允许方法 DELETE
【发布时间】:2012-11-12 07:40:10
【问题描述】:

我正在尝试向我的 restserver 发出 ajax 请求:

<script>
var id = "104";
var postData = {
  'id' : id
};
AJS.$.ajax({
     url: "myurl",
     crossDomain: true,
     data: postData,
     type: "DELETE",
     // dataType: "json",
     success: function(msg, textStatus, jqXHR) {
        alert( "Data Saved: " + msg);
     }
});
</script>

但我收到以下错误: XMLHttpRequest 无法加载 http://myurl/rest/controller/resource/id/107。 Access-Control-Allow-Methods 不允许使用 DELETE 方法。

我在我的 php 控制器顶部添加了以下内容:

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers', 'x-requested-with');

它似乎接受的唯一方法是 get 和 post,但 delete 和 put 会产生错误。

有什么想法吗?

谢谢, 詹姆斯

【问题讨论】:

  • 你得到这个工作了吗?浏览器似乎忽略了 Access-Control-Allow-Methods
  • 是的,使用下面的方法,现在也在使用 Laravel。

标签: php jquery xmlhttprequest


【解决方案1】:

前几天我惨痛地了解到,几乎不可能从任何浏览器执行跨域 ajax 请求。我将在服务器端处理重定向 HTTP 请求。让这个 ajax 请求转到同一 url/服务器上的脚本,并让该脚本执行 HTTP 请求并等待来自您尝试从中获取数据的其他服务器的数据。

【讨论】:

  • 嗨雅各布,有趣的想法。我确实有 POST 和 GET 工作,我的考虑是,如果 POST 工作我也许可以发送一个隐藏字段来响应 DELETE 和 PUT 方法?另一件事是,您将如何将 AJAX 请求写入另一个脚本,或者甚至将参数从一个脚本传递到另一台服务器上的另一个脚本。这是个好主意,但听起来写起来很费力:)
猜你喜欢
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2012-05-25
  • 2017-06-09
  • 2013-01-24
  • 2017-01-11
相关资源
最近更新 更多