在进行$ .ajax调用时收到错误(跨源请求被阻止)

时间:2016-07-07 11:52:24

标签: javascript jquery ajax cors

我正在打电话获取一些信息,但我一直收到此错误

阻止跨源请求:(原因:缺少CORS标头'Access-Control-Allow-Origin')

$.ajax({
  type: 'GET',
  url: www.example.com/,
  dataType:"json",
  success: function(data) {
    alert(data)
  },
  error: function() {
    alert('error')
  }
});

正在返回的内容将以json

的形式出现

任何想法?

6 个答案:

答案 0 :(得分:3)

除非已启用服务器应用程序以提供Cross-Origin-Request,否则无法获得成功的响应,因为默认情况下已禁用CORS以防止安全攻击。要避免CORS错误,请在响应中添加以下标头:

  

Access-Control-Allow-Origin:*

有关详情,请仔细阅读url

Here,Mozilla开发人员很好地解释了CORS请求黑客。

答案 1 :(得分:0)

首先,我认为url: www.example.com/应该引用url: "www.example.com"。其次,除非服务器允许,否则您无法进行跨域ajax请求https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS。您可以使用CORS或JSONP。

答案 2 :(得分:0)

默认情况下,您不允许发出跨域请求。 CORS header' Access-Control-Allow-Origin'如果您被允许向example.com提出请求,则必须包含您的域名。

有关如何发出跨域请求的详细信息,请查看How to make cross domain request

答案 3 :(得分:0)

您可以通过jsonp(仅限GET请求!)

发出请求来绕过CORS
$.ajax({
  type: 'GET',
  url: www.example.com/,
  dataType:"jsonp",
  success: function(data) {
    alert(data)
  },
  error: function() {
    alert('error')
  }
});

more info

答案 4 :(得分:0)

我能够在$ .ajax调用中使用以下选项解决我的问题。

xhr.withCredentials = true; Access-Control-Allow-Credentials: true

请阅读以下内容以更好地理解这一点。

withCredentials

标准CORS请求默认不发送或设置任何cookie。为了将cookie包含在请求中,您需要将XMLHttpRequest的.withCredentials属性设置为true:

xhr.withCredentials = true;

为了使其正常工作,服务器还必须通过将Access-Control-Allow-Credentials响应标头设置为“true”来启用凭据。有关详细信息,请参阅服务器部分。

Access-Control-Allow-Credentials:true

.withCredentials属性将包含来自请求中远程域的任何cookie,并且还将设置来自远程域的任何cookie。请注意,这些Cookie仍然遵循同源策略,因此您的JavaScript代码无法访问document.cookie或响应标头中的Cookie。它们只能由远程域控制。

希望这也可以帮助你:)

答案 5 :(得分:0)

我认为PHP网站需要放置这样的东西,在我的网站上我只是称之为apiheader,并在需要时包含它