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

我发送一个发送请求到一个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请求发送到目标URL
>然后只有当服务器对该OPTION的响应包含adequate headers (Access-Control-Allow-Origin is one of them)以允许CORS请求时,浏览将执行调用(几乎完全一样,如果HTML页面在同一个域)。

>如果预期的标题不来,浏览器就会放弃(就像你这样做)。

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

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

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...