但是,当我通过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版本。
解决方法
也就是说:现代浏览器只允许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 举报,一经查实,本站将立刻删除。