Междоменный XML в Javascript из переполнения стека

Я хочу отправить данные XML с php (домена ) в удаленный файл JavaScript (домен В).
У меня не может быть их в одном домене, и у меня не может быть других файлов в домене B.

Я читал об отправке объекта JSONP из php вместо XML, но, как я понял из учебника, мне понадобится php-прокси в том же домене, где находится файл javascript. учебная ссылка
(xhr.open («GET», «xmlproxy.php? url =» + escape (url), true); <= эта строка как бы говорит мне, что xmlproxy.php должен находиться в том же домене, что и настоящий javascript)

Любые предложения, как я мог это сделать?

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ ПОСЛЕ ответа Thw

Теперь у меня есть следующий пример кода:

Файл testlog.php

<?php header('Access-Control-Allow-Origin: *');
print "<Logs><Log><id>Test Log</id></Log></Logs>";
?>

Функция javascript, которая вызывается при загрузке страницы:

function getTestLog() {
alert("Gets here!");
$.ajax({
url: "anotherdomain/testlog.php",
data: requestVars,
dataType: 'xml',
success: function(xml){
alert(xml);
},
error: function (xhr, err) {
alert("Error: " + xhr.readyState + "\nstatus: " + xhr.status + "\nerror:" + err);
alert("responseText: " + xhr.responseText);
}
});
}

Проблема в том, что это не входит в AJAX

0

Решение

Если вы управляете PHP, который выводит XML, вы можете использовать CORS.

По умолчанию Javascript может открывать ресурсы только из домена, в который он был загружен. Другие ресурсы должны позволять загружать их с помощью Javascript в другом домене.

Для этого добавьте заголовок в PHP-скрипт:

header('Access-Control-Allow-Origin: http://javascript-domain.tld');

Или разрешить загрузку XML из любого места:

header('Access-Control-Allow-Origin: *');

Вы используете jQuery, и здесь может возникнуть проблема, если вы не отправляете правильный тип контента из PHP.

header('Content-Type: application/xml');

Чтобы удостовериться в том, что именно кросс-домен блокирует чтение, откройте консоль Javascript в браузере. Должно появиться сообщение об ошибке. В Firefox это что-то вроде:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://domain.tld/path/to/resource. This can be fixed by
moving the resource to the same domain or enabling CORS

Если вы получите запрос, он должен появиться на вкладке Network ваших инструментов разработчика, и вы сможете проверить заголовки HTTP-ответа.

Вот простой фрагмент JS, использующий XHR, он вызывает тип контента:

var xhr = new XMLHttpRequest;
xhr.overrideMimeType("application/xml");
xhr.addEventListener(
'load',
function (xhr) {
return function () {
if (xhr.status >= 200 && xhr.status < 400) {
console.log(xhr.responseXML);
}
}
}(xhr)
);
xhr.open('GET', 'http://php-domain.tld/script.php');
xhr.setRequestHeader("Accept", "application/xml");
xhr.send();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]