gpt4 book ai didi

jQuery .ajax() POST 请求在 RESTful WCF 上抛出 405(方法不允许)

转载 作者:行者123 更新时间:2023-12-03 21:29:54 24 4
gpt4 key购买 nike

我正在向 RESTFUL WCF 服务应用程序发送发布请求。我能够通过 Fiddler 成功发送 POST 请求。

但是,当我通过 jQuery Ajax 方法执行此操作时,该函数会向 Chrome 开发者控制台返回以下内容:

OPTIONS http://www.example.com/testservice/service1.svc/GetData 405 (Method Not Allowed) jquery.min.js:6

但是在记录之后一秒钟:

Object {d: "You entered 10"} testpost.html:16

这告诉我,jQuery 正在发送一个 OPTIONS 请求,该请求失败,然后发送一个 POST 请求,该请求返回预期的结果数据。

我的 jQuery 代码:

$.ajax() {        
type: "POST", //GET or POST or PUT or DELETE verb
url: "http://www.example.com/testservice/service1.svc/GetData", // Location of the service
data: '{"value":"10"}', //Data sent to server
contentType:"application/json",
dataType: "json", //Expected data format from server
processdata: false,
success: function (msg) {//On Successfull service call
console.log(msg);
},
error: function (xhr) { console.log(xhr.responseText); } // When Service call fails
});

我使用的是 jQuery 版本 2.0.2。

任何有关此错误发生原因的帮助都会有很大帮助。

最佳答案

您的代码实际上是在尝试创建 Cross-domain (CORS)请求,而不是普通的POST

也就是说:现代浏览器只允许 Ajax 调用与 HTML 页面同一域中的服务。

示例: http://www.example.com/myPage.html 中的页面只能直接请求 http://中的服务www.example.com,例如 http://www.example.com/testservice/etc。如果服务位于其他域中,浏览器将不会直接调用(如您所期望的)。相反,它会尝试发出 CORS 请求。

简单来说,要执行 CORS 请求,您的浏览器:

  • 首先会向目标网址发送 OPTION 请求
  • 然后仅当服务器对该OPTION的响应包含 adequate headers (Access-Control-Allow-Origin is one of them)为了允许 CORS 请求,浏览器将执行调用(几乎与 HTML 页面位于同一域时的方式完全相同)。
    • 如果预期的 header 没有出现,浏览器就会放弃(就像它对您所做的那样)。

如何解决?最简单的方法是在服务器上启用 CORS(启用必要的 header )。

如果您没有服务器端访问权限,您可以从其他地方镜像 Web 服务,然后在那里启用 CORS。

关于jQuery .ajax() POST 请求在 RESTful WCF 上抛出 405(方法不允许),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com