Как включить междоменный запрос на сервере?
У меня есть json файл, размещенный на моем сервере. Когда я пытаюсь выполнить запрос AJAX "GET" в json файл, он терпит неудачу.
См. консоль в Safari, в ней говорится: "Не удалось загрузить ресурс".
Firebug показывает "200 OK", но ответ не появляется. Даже Firebug не показывает вкладку JSON.
Я считаю, что это потому, что запросы с кросс-доменами не разрешены с использованием AJAX.
Я хотел бы знать, как я могу это преодолеть? Кроме того, если я хочу разрешить междоменные запросы на моем сервере, я считаю, что файл crossdomain.xml
или что-то нужно создать. Я не уверен, но это то, что я знаю. Я искал в Google, но не смог найти соответствующие ссылки.
Любая помощь в этом высоко ценится.
Спасибо.
UPDATE:
Я не использую серверный скриптовый язык (PHP, ASP.NET и т.д.). Я использую простой HTML и JavaScript/jQuery.
ОБНОВЛЕНИЕ-2:
Я использовал следующий код для создания междоменных запросов:
<script src="jquery-1.6.2.js"></script>
<script>
$(document).ready(function () {
$.ajax({
dataType: 'jsonp',
data: '',
jsonp: 'jsonp_callback',
url: 'http://myhosting.net/myjsonfile.json',
success: function (jsonData) {
alert("success")
alert(jsonData);
},
error: function(errorObj) {
alert(errorObj.statusText);
},
});
});
Когда я вижу вкладку "Net" Firebug, я вижу вкладку JSON, и я могу видеть ответ json. Однако обработчик обратного вызова "success" не вызван, но обработчик обратного вызова "ошибка" вызывается, и я получаю сообщение с сообщением parseerror
.
Любая идея, что может быть неправильным?
Ответы
Ответ 1
Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com
на целевом сервере
в php:
header("Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com");
если вы не хотите использовать язык сценариев на сервере: поместите это в (linux) консоль
a2enmod headers
и к файлу .htaccess добавьте
Header set Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com
Ответ 2
Поместите это в свой .htaccess и выполните простой ajax
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
Ответ 3
решение, данное генерацией, работало для меня, однако мне пришлось опустить конечную косую черту на url. то есть:
header("Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com");
Ответ 4
@genesis Я согласен с вашим ответом, но это необходимо, когда сервер восстанавливает объект JSON и находится в другом домене, я не думаю, что с jsonp вам нужно внести какие-либо изменения на стороне сервера. jsonp должен решить проблему CORS.