#javascript #jquery #ajax #get #cross-domain
#javascript #jquery ( jquery ) #ajax #получить #междоменный
Вопрос:
Я пытаюсь сделать запрос GET к API из локально размещенного приложения meteor ( => App running at: http://localhost:3000/
), и при этом я получаю сообщение об ошибке:
«XMLHttpRequest не может загрузить [api-url]. В запрошенном ресурсе отсутствует заголовок ‘Access-Control-Allow-Origin’. http://localhost:3000
Поэтому доступ к Origin запрещен «.
Тем не менее, когда я вставляю [-api-url] в свой браузер и нажимаю ENTER, в окне моего браузера отображается соответствующий ответ API (небольшой объект JSON). Я прочитал несколько других сообщений SO о проблемах с междоменными запросами, но я не понимаю решений или в чем разница между отправкой GET из моего кода или из браузера. Может кто-нибудь объяснить, почему происходит такое поведение, и каковы соответствующие изменения в моем коде / дизайне? Мой существующий код выглядит следующим образом:
$.ajax({
type: "get",
url: auth_ad_act_url,
data: {
ads_token: ACCESS_TOKEN
},
dataType: 'jsonp',
success: function(data, status) {
console.log(data);
}
});
Редактировать:
Я выполняю jQuery.ajax() типа «get», снабженный URL-адресом, объектом параметров и функцией успешного обратного вызова, а также типом данных ‘jsonp’ для обработки междоменных запросов.
Я опубликовал новый код. Теперь ошибка заключается в том, что ответ неверен. (Я знаю это, потому что это работало из моего браузера, и этот ответ соответствовал документации API). Ответ таков: «Ресурс интерпретируется как скрипт, но передается с помощью MIME-типа text / html: https://host.com/apps /[my-app-id]/авторизовать учетную запись пользователя?callbac …» но это должен быть объект с ключом «url» и еще кое-что. Я также получаю ошибку «Uncaught SyntaxError: неожиданный токен:», когда я включаю ‘jsonp’. Но этот неправильный ответ, упомянутый выше, по-прежнему регистрируется на консоли, поэтому я не понимаю, когда и где возникает эта синтаксическая ошибка.
Комментарии:
Ответ №1:
Та же политика происхождения не включает то, что вы вводите в свою адресную строку. Если бы это произошло, вы буквально не смогли бы получить доступ к любому веб-сайту вообще, если он не был сохранен на вашем локальном компьютере!
В вашей ситуации, чтобы получить необходимый вам ресурс из get jQuery, вам нужно либо использовать серверный прокси, размещенный в соответствующем домене, либо, поскольку вы используете JSON, посмотрите, поддерживает ли используемый вами API JSONP.
Ответ №2:
Существует возможность получить данные JSON с междоменным запросом. Вы должны использовать JSONP и определить метод обратного вызова, который должен быть в вызове и в данных JSON.
Ваш запрос:
$.ajax({
type: "GET",
url: auth_ad_act_url "amp;callback=?",
jsonpCallback: "jsonCallback",
dataType: "jsonp",
success: function(data) {
// Do something with the data
}
)};
Файл JSON на внешнем сервере:
jsonCallback(INSERT_HERE_THE_JSON_DATA);
Если у вас нет возможности добавить обратный вызов JSON на внешний сервер, проверьте CORS.
Комментарии:
1. Запрашиваемый мной URL-адрес является чужим API, поэтому я ничего не могу сделать с их кодом, например, вставить этот jsonCallback. Что это за прокси-бизнес, упомянутый выше? Я кратко прочитал, что это значит, но я не уверен, что это влечет за собой с точки зрения кода.