我想将来自php(域 A )的XML数据发送到远程javascript文件(域 B )。 我无法将它们放在同一个域中,而且我无法在域B上拥有任何其他文件。
我已经阅读过从php而不是XML发送JSONP对象,但正如我从教程中所理解的那样,我需要在与javascript文件所在的域相同的域上使用php代理。 tutorial link ( xhr.open(" GET"," xmlproxy.php?url =" + escape(url),true); < =此行有点告诉我,xmlproxy.php必须与actuala javascript在同一个域上)
有关我怎么能这样做的任何建议?
在回答后再编辑
现在我有以下示例代码:
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 :(得分:0)
如果您控制输出XML的PHP,您可以使用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-Tab中,您可以验证HTTP响应标头。
这是使用XHR的简单JS代码段,它强制使用内容类型。:
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();