Я пытаюсь сделать запрос AJAX для https://developers.zomato.com/api/v2.1/search со ссылкой на Zomato APIAJAX запрос с заголовками неудовлетворительных
Сервера имеет заголовки:
"access-control-allow-methods": "GET, POST, DELETE, PUT, PATCH, OPTIONS",
"access-control-allow-origin": "*"
Проблема заключается в том, что API требует дополнительных заголовков, установленных для пользователя -key. Но всякий раз, когда я устанавливаю пользовательские заголовки, хром будет выполнять предполетный запрос, отправив запрос OPTIONS на вышеуказанный URL-адрес, который не работает, и, следовательно, запрос AJAX также не работает.
Если я не устанавливаю заголовки, то я не получаю ошибку CORS, а скорее запретную ошибку с сервера, так как я не устанавливаю заголовок пользовательского ключа.
Любой способ решить эту проблему-22?
Оба Jquery и JavaScript путь не удается:
$(document).ready(function() {
$.ajax({
url: 'https://developers.zomato.com/api/v2.1/search',
headers: {
'Accept': 'application/json',
'user_key': 'XXXXX'
},
success: function (data) {
console.log(data);
}
});
});
var xhr = new XMLHttpRequest();
var url = 'https://developers.zomato.com/api/v2.1/search';
xhr.open('GET', url, false);
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('user_key', 'XXXXXX');
xhr.send(null);
if (xhr.status == 200) {
console.log(xhr.responseText);
}
Ошибка я получаю:
OPTIONS https://developers.zomato.com/api/v2.1/search
XMLHttpRequest cannot load https://developers.zomato.com/api/v2.1/search. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. The response had HTTP status code 501.
Если кто-то хочет, чтобы воспроизвести вы можете получить бесплатный пользовательский ключ здесь: https://developers.zomato.com/api
вы пробовали использовать JSONP? 'dataType: 'jsonp'' –
Я не вижу никакой документации для jsonp в там docs, для jsonp сервер не должен его поддерживать ?. В любом случае, поскольку они устанавливают «доступ-контроль-разрешить-источник»: «*», мой запрос должен работать правильно? –
@JaromandaX API Zomato требует, чтобы он был установлен как заголовок. См. Пример запроса, который они отправляют 'curl -X GET --header 'Accept: application/json" --header "user_key: xxxxx" "https://developers.zomato.com/api/v2.1/search" ' –