3

我正在使用一些 3rd 方 web api,当我通过应用程序中的 ajax 调用调用该 web api 时,总是出错而不是成功。在控制台中检查时,我收到“XMLHTTPRequest 无法加载 http://... Origin http//localhost:port/ is not allowed by Access-Control-Allow-Origin”错误

            $.ajax({
               url: "SomeURL",
               type:"GET",
               dataType: 'jsonp',
               crossDomain: true,
               success: function (data) {
                   alert("Success");
               },
               error: function (data, Errtext) {
                  alert("some error occured");
               }
           });

当我直接在浏览器中访问该 URL 时,我会收到 XML 格式的数据

我还提到了类似的问题 How to resolve uncaught syntax error in jsonp but not get the solution

提前致谢

4

1 回答 1

1

您可以在浏览器中看到响应,因为只有跨域ajax请求受同源策略的约束。

为了克服同源策略的限制,您应该使用 jsonp 或跨域资源共享(CORS)。

JSONP:JSONP 到底是什么?

请注意,要使用 jsonp ,您调用的第三方 web api 应该支持 jsonp。

CORS:跨域资源共享标准通过添加新的 HTTP 标头来工作,这些标头允许服务器描述允许使用 Web 浏览器读取该信息的源集。此外,对于可能对用户数据造成副作用的 HTTP 请求方法(特别是对于 GET 以外的 HTTP 方法,或者对于某些 MIME 类型的 POST 使用),规范要求浏览器“预检”请求,请求支持的方法使用 HTTPOPTIONS 请求方法从服务器发送,然后,在服务器“批准”后,使用实际 HTTP 请求方法发送实际请求。服务器还可以通知客户端是否应随请求发送“凭据”(包括 Cookie 和 HTTP 身份验证数据)。

https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

在 asp.net 应用程序中启用 CORS:

<system.webServer>
 <httpProtocol>
  <customHeaders>
   <add name="Access-Control-Allow-Origin" value="*" />
   <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
 </httpProtocol>
</system.webServer>
于 2013-10-19T14:57:04.197 回答