Я пытаюсь сделать кросс-доменный асинхронный запрос GET через ajax
jQuery, и я получаю много проблем, понимая, что происходит, и сообщения об ошибках веб-браузеров.Может ли кто-нибудь помочь мне понять асинхронный JS-запрос crossdomain и как его отладить?
Во-первых, вот код CoffeeScript:
$(document).on('submit', '.myform', (e) ->
try
foo = 'val'
settings =
data: { foo: foo }
type: 'GET'
dataType: 'json'
success: (data, textStatus, jqXHR) ->
console.log data if debug?
console.log textStatus if debug?
error: (jqXHR, textStatus, errorThrown) ->
console.warn textStatus if debug?
console.warn errorThrown if debug?
$.ajax('http://anotherserver.tld/api', settings)
catch error
console.error error
finally
return false
)
я понял, что json
имеет тип а действительные данные, только если вы настроите перекрестную файл домена на хосте, обслуживающей JavaScript. Вот один я (назовём сервер my_server.tld
):
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<!-- Read this: https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
<!-- Most restrictive policy: -->
<!-- <site-control permitted-cross-domain-policies="none"/> -->
<!-- Least restrictive policy: -->
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
(это из HTML5 шаблонный)
Когда я пытаюсь этот код, я получаю следующее сообщение об ошибке:
[Error] XMLHttpRequest cannot load http://anotherserver.tld/api?foo=val. Origin http://my_server.tld is not allowed by Access-Control-Allow-Origin.
Это меня смущает. Это что-то отсутствует или неисправная конфигурация на my_server
или anotherserver
? Имеются ли файлы crossdomain.xml
, относящиеся к этим вопросам?
Причина, даже если у меня нет доступа к anotherserver.tld
, я пробовал этот код, используя my_other_server
, и я смог полностью увидеть запрос в журналах доступа my_other_server
.
Благодарим за помощь.
(для записи, я попытался переключиться на jsonp
, но затем я получаю ошибку синтаксического анализа на то, что выглядит как прекрасно данных JSON ... некоторые волосы были потеряны)
Update: это crossdomain.xml
файл от anotherserver.tld
:
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
http://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work – rocky
Ваш * сервер *, отправивший запрос на необходимость поддержки CORS ('Access- Control-Allow-Origin') или JSONP (который не является * JSON). Для работы CORS ваш сервер должен установить заголовок 'Access-Control-Allow-Origin'. Для JSONP ваш сервер должен вывести файл JavaScript. JSONP отформатирован так: 'callback ({your: data})'. –
google эта ошибка ... есть даже целый сайт, посвященный этому – charlietfl