我正在向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页面相同的same domain中的服务。
示例: http://www.example.com/myPage.html
中的页面只能直接请求http://www.example.com
中的服务,例如http://www.example.com/testservice/etc
。如果服务在其他域中,则浏览器将不会直接呼叫(如您期望的那样)。相反,它将尝试发出CORS请求。
简而言之,要执行CORS请求,请使用浏览器:
OPTION
请求到目标URLOPTION
的响应包含允许CORS请求的adequate headers (Access-Control-Allow-Origin
is one of them)时,浏览器将执行该调用(几乎完全相同,如果HTML页面位于同一页面上域)。如何解决?]最简单的方法是在服务器上启用CORS(启用必要的标头)。
如果您没有服务器端的访问权限,则可以从其他地方镜像Web服务,然后在该处启用CORS。
您必须在global.aspx
您也可以在过滤器中创建所需的标题。
由于相同的错误代码,我有完全不同的原因,我在这里分享以提供帮助