Браузеры не разрешают междоменные вызовы AJAX. Разрешены только междоменные JSONP запросы.
Чтобы использовать запросы JSONP, необходимо изменить свойство dataType
на jsonp
. Это означает, однако, что вы не можете запрашивать XML, а только JSONP.
Немного о JSONP:
Тег <script>
обходит междоменные ограничения. Это означает, что вы можете использовать этот тег для получения данных с других серверов. Этот тег не поддерживает все виды языков, поэтому XML не поддерживается.
JSONP - это, в основном, JSON, но с вызовом функции вокруг него так:
functionname({"property":"value"})
Я вижу, вы удивляетесь: «Что там делает это имя функции?»
В этом ИМЕННО разница с JSON. Поскольку функция обернута вокруг нее, вы можете использовать фактические данные!
<script type="text/javascript">
var functionname = function(json) {
alert(json.property);
}
</script>
<script type="text/javascript" src="http://www.domain.com/jsonp"></script>
Если вы замените второй тег сценария содержимым ответа, все это будет иметь смысл:
<script type="text/javascript">
var functionname = function(json) {
alert(json.property);
}
functionname({"property":"value"});
</script>
Хотите верьте, хотите нет, но эта небольшая разница фактически позволяет нам сделать междоменные запросы намного безопаснее.
Еще одна тема о JSONP