微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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。

原文地址:https://www.jb51.cc/jquery/183593.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐