Ajax Jquery CORS无法运行

时间:2016-10-22 21:56:52

标签: javascript jquery ajax cors

大家好我在3天之内就这个问题进行斗争和搜索。我从sharethis.com RESTapi获取数据时遇到问题。我正在使用jQuery和Laravel 5.2。我想从这个json中获取值:http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com但是我很沮丧地尝试了很多方法和函数。我的实际代码是:

function setHeader(xhr) {
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type');
xhr.setRequestHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
}
$.ajax({
url: 'http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com',
type: 'GET',
beforeSend: setHeader,
contentType: 'application/json; charset=utf-8',
success: function() { alert("Success"); },
error: function() { alert('Failed!'); }
});

此请求始终返回"失败!"。我理解CORS的含义,但在实践中,我无法使其发挥作用。有任何想法吗?感谢..

2 个答案:

答案 0 :(得分:1)

也许你真的不理解CORS:)

这些标题必须出现在响应中,而不是在请求中。

服务器必须提供它们。

服务器必须同意。

您提供的网址没有CORS标头,因此您无法通过AJAX获取它,除非您修改后端。

答案 1 :(得分:0)

使用XMLHttpRequest运行此代码以获取数据

 var url = "http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com";

 var xhr = createCORSRequest('GET', url);

 xhr.setRequestHeader(

'X-Custom-Header', 'value');

xhr.withCredentials = true;

xhr.onload = function () {

            if (this.status === 200) {

                console.log(xhr);
            }

};

xhr.send();

还有检查url是否支持CORS的功能

function createCORSRequest(method, url) 
{

var xhr = new XMLHttpRequest();

 if ("withCredentials" in xhr) {
   // XHR for Chrome/Firefox/Opera/Safari.
   xhr.open(method, url, true);

   console.log("for chrome/fir");
 } else if (typeof XDomainRequest != "undefined") {
   // XDomainRequest for IE.
   xhr = new XDomainRequest();
   xhr.open(method, url);

   console.log("ie");
 } else {
   // CORS not supported.
   xhr = null;
   console.log("not supported");
 }
 return xhr;
}   

希望它有所帮助,问候