从PHP跨域XML到Javascript



我想将XML数据从php(域A)发送到远程javascript文件(域B)。我不能将它们放在同一个域上,也不能在域 B 上拥有任何其他文件。

我已经读过有关从 php 而不是 XML 发送 JSONP 对象的信息,但正如我从教程中了解到的那样,我需要在与 javascript 文件所在的域相同的域上使用 php 代理。 教程链接(xhr.open("GET", "xmlproxy.php?url=" + escape(url), true);<= 这一行有点告诉我,XMLPROXY .php 必须与实际的 JavaScript 位于同一域中)

关于我该怎么做的任何建议?

稍后在ThW的回答后编辑

现在我有以下示例代码:

测试日志.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的事情。

如果你控制输出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 控制台。它应该输出一条错误消息。在火狐中,它是这样的:

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

如果收到请求,它应显示在开发人员工具的"网络"选项卡中,并且可以验证 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();

相关内容

  • 没有找到相关文章

最新更新