2016-10-22 2 views
0

Приветствую всех, кто сражается и ищет решения об этом от 3 дней. У меня проблема с получением данных от sharethis.com RESTapi. Я работаю с jQuery и Laravel 5.2. Я хочу получить значения из этого json: http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com, но я очень напыщен, пытаясь использовать множество методов и функций. Мой фактический код:Ajax JQuery CORS не работает

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!'); } 
}); 

Этот запрос всегда возвращает «Failed!». Я немного понимаю, что означает CORS, но на практике я не могу заставить его работать. Есть идеи? Спасибо ..

+0

*»Я понимаю, CORS "* ... ясно, что вы этого не сделаете, эти заголовки не могут быть заданы в запросе, они должны быть установлены на серверной стороне – charlietfl

+0

Привет @charlietfl Я помещаю это в первую строку моего php-файла: но не вносить никаких изменений ... любая идея? – Francisco

+0

@Francisco Этого одного заголовка недостаточно. Вам также нужны «Allow-Headers» и «Allow-Methods». –

ответ

1

Может быть, вы на самом деле не понимаю CORS :)

Эти заголовки должны присутствовать в ответе, а не в запросе.

Сервер должен предоставить их.

Сервер должен согласиться.

Указанный URL не имеет заголовков CORS, поэтому вы не можете получить его через AJAX, если вы не измените бэкэнд.

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; 
} 

надеюсь, что это помогает, считает

+0

Привет, спасибо за помощь, но консоль все еще говорит: XMLHttpRequest не может загрузить http://rest.sharethis.com/v1/count/urlinfo?url=http://www.sharethis.com. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Происхождение 'http: // localhost', следовательно, не допускается. – Francisco