2016-05-29 1 views
1

Я пытаюсь получить некоторые данные JSON. Я могу получить доступ к данным только в обычном веб-браузере, например: http://www.ebrent.net/apis/tsp.php?fund=G+Fund&start=2003-01-01&end=2004-01-01, но я не могу заставить его работать в jQuery. Что я делаю не так?Не удается вызвать метод getJSON для извлечения данных

Пожалуйста, обратите внимание на мой jsFiddle: https://jsfiddle.net/MrSnrub/mq31hwuj/

var tsp_api = '//www.ebrent.net/apis/tsp.php?start=2003-01-01&end=2004-01-01'; 

$.getJSON(tsp_api, function(json) { 

    // This alert never gets called. 
    alert("Success!"); 

    // Set the variables from the results array 
    var data = json; 
    // console.log('Data : ', data); 

    // Set the div's text 
    $('#div-data').text(data); 

}); 
+0

Есть ли www.ebrent.net CORS включен? –

ответ

1

Вы не можете получить результат, потому что удаленный сайт не имеет CORS включено: Если вы посмотрите на консоли, вы увидите:

Cross-Origin Request Заблокировано: The Same Origin Policy запрещает чтение удаленный ресурс в http://www.ebrent.net/apis/tsp.php?start=2003-01-01&end=2004-01-01. (Причина: заголовок CORS «Access-Control-Allow-Origin» отсутствует).


Вы можете обойти CORS, используя что-то вроде anyorigin.com, т.е .:

$.getJSON('http://anyorigin.com/get/?url=http%3A//www.ebrent.net/apis/tsp.php%3Fstart%3D2003-01-01%26end%3D2004-01-01&callback=?', function(data){ 
    $('#div-data').html(data.contents); 
}); 
+0

Где вы видите ошибку в консоли? Я открываю Firebug и перехожу в консоль, но все, что я вижу, это красный X; Я не вижу ничего упоминания о Cross Origin Request Blocked. – MrSnrub

+0

Ваш пример на jsfiddle показывает 2 ошибки, 1-е - смешивание содержимого (запрос http с использованием https), второй - тот, который я опубликовал выше. –

+0

Я думал, что использование '// www.ebrent.net' вместо' http: // www.ebrent.net' или 'https: // www.ebrent.net' должно было заботиться о ошибке содержимого микширования. – MrSnrub

0

Это работает, если вы запускаете сервер без использования протокола HTTPS. Примечание fetchApi был вместо Jquery библиотеки используется как его не легко доступны в браузере

var tsp_api = 'https://www.ebrent.net/apis/tsp.php?start=2003-01-01&end=2004-01-01'; 


function fetchData(url) { 
     return fetch(url, { 
      method: 'get' 
     }).then(function(response) { 
      return response.json(); 
     }).catch(function(err) { 
      console.log(error); 
     }); 
    } 
fetchData(tsp_api).then((data)=> console.log(data)).catch((err)=> console.log(err)); 

Это не будет работать на jsfiddle с помощью HTTPS, браузер откажется загружать любые ресурсы через HTTP. Как вы уже пробовали, изменение URL-адреса API для HTTPS вместо HTTP обычно устраняет эту проблему. Тем не менее, ваш ebrent.net не разрешил соединение с CoRS для HTTPS. Из-за этого вы не сможете получить свой результат для jsfiddle

Смежные вопросы