2015-04-25 2 views
4

Я пытаюсь сделать простой $.getJSON запрос по следующему URL-адресу: http://dev.markitondemand.com/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A7%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22NUS%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D

Нет «Access-Control-Allow-Origin заголовок присутствует на запрошенном ресурсе. Origin 'http://localhost:1337' поэтому не допускается.

Мой код очень прост:

var ticker = "CRR"; 
var url = "http://dev.markitondemand.com/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A7%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22" + ticker + "%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D"; 

$.getJSON(url, function(data) { 
    console.log(data); 
}).success(function() { 
    $('#show-data').html("Successfully retrieved data."); 
}).error(function() { 
    $('#show-data').html("Service Unavailable."); 
}); 

Это не запуская никаких функций ошибки или успеха, и я получаю то же самое, когда я пытаюсь $.ajax вместо этого. Что касается моих настроек, я экспериментирую с проектом MEN, поэтому Mongo, Express и Node.js на моем локальном хосте. Любая помощь будет оценена по достоинству.

+0

вы можете попробовать установить '' 'dataType: 'jsonp'''' вам также придется использовать функцию обратного вызова - см. Здесь http://stackoverflow.com/questions/5943630/basic-example-of- using-ajax-with-jsonp –

ответ

5

Вы, видимо, пытаясь запрос кросс-происхождения Ajax. Это означает, что вы пытаетесь связаться с сервером на другом домене/порте, чем тот, на котором запущена веб-страница. Это называется запросом перекрестного происхождения и не разрешено по умолчанию. Вы можете прочитать о той же политике безопасности браузера here.

Для того, чтобы разрешить запрос на перекрестный поиск напрямую, сервер, на который вы делаете запрос, должен его специально разрешить.

Заголовок Access-Control-Allow-Origin - это тот способ, которым он разрешил бы этот тип доступа, но, по-видимому, он не применяет этот заголовок, и поэтому запрос отклоняется браузером. Вы можете прочитать о том, как работает CORS (совместное использование ресурсов Cross Source) here.

Другие способы сделать запросы на перекрестный поиск используют JSONP (также требуется сотрудничество с целевым сервером для поддержки запроса JSONP) или через прокси (на другом сервере, с которым вы можете связаться, который может сделать запрос на желаемый сервер для вас и вернуть вам результаты). Прокси-сервер требует вашего собственного кода сервера на сервере, на котором у вас есть разрешение на доступ, но не требует взаимодействия с целевым сервером.

В отношении the doc on this page, похоже, что Markit On Demand поддерживает JSONP, поэтому вы можете использовать эту форму для запроса на перекрестный поиск. jQuery ajax поддерживает этот формат, если вы установили соответствующий параметр dataType: "jsonp" для $.ajax().

+0

Благодарим вас за подробный ответ. Я боялся этого. Документация для запроса вызвала запрос jsonp, однако это вызывало проблемы с ошибкой сервера 500 (что произошло, когда я попытался сделать запрос с недопустимой обработкой ошибок и ошибкой параметра). В конце концов, я закончил использование Quandl, но по крайней мере сейчас я полностью понимаю, почему. Надеюсь, это поможет другим. Спасибо. :) – Lindsay

0

Это сообщение видно из-за того, что сервер не разрешает использование ресурсов Cross-Origin через Ajax. Поэтому либо попросите администратора сервера включить cors для вас, либо попробуйте использовать JSONP, если это поддерживается сервером.

http://enable-cors.org/server.html

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