Я хочу отправить XML-данные из php (домен A) в удаленный файл javascript (домен B). Я не могу иметь их в одном домене, и я не могу иметь никаких других файлов в домене B.
Я читал о отправке объекта JSONP из php вместо XML, но, как я понял из учебника, мне нужен php-прокси-сервер в том же домене, где находится файл javascript. tutorial link (xhr.open("GET", "xmlproxy.php? url =" + escape (url), true); <= эта строка указывает мне, что xmlproxy.php должен находиться в том же домене, что и actuala 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);
}
});
}
Проблема в том, что он не попадает в аякс
Если вы управляете PHP, который выводит XML, вы можете использовать CORS.
По умолчанию Javascript может открывать только ресурсы из домена, который был загружен. Другие ресурсы должны позволять загружать их Javascript в другом домене.
Для этого добавьте заголовок в PHP-Script:
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-Tab ваших инструментов разработчика, и вы можете проверить заголовки ответов 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();