【问题标题】:$.getJSON or $.ajax alternative for XML retrieval用于 XML 检索的 $.getJSON 或 $.ajax 替代方案
【发布时间】:2013-03-29 23:44:03
【问题描述】:

我已经开始从事一个私人项目。但是,在第一阶段,我已经面临一个问题。

  1. 返回的数据是 XML 格式的(还不错,但是要花很多精力来解析成可用的对象)
  2. 远程服务器不接受除自己以外的任何ORIGIN,所以浏览器抛出错误:Origin * is not allowed by Access-Control-Allow-Origin.

    • (*) 可以是 null、localhost 或我的网站。

所以我一直在搜索,但找不到任何结果。

使用$.ajax时似乎没有jsonp参数的替代方案,而名称$.getJSON正如它所说的,意在检索JSON,而不是XML。

所以我想知道,是否有任何其他替代方法可以在发送请求时禁用 ORIGIN 属性来检索外部 XML 数据?


我注意到可以使用 PHP 函数获取内容:file_get_contents。但我真的很想知道是否有不同的方式使用 JQuery。

如果有人知道我如何让 JQuery 与返回的 PHP 文件内容进行通信,请随时启发我:']


解决了。请参考以下帖子:$.getJSON or $.ajax alternative for XML retrieval

【问题讨论】:

  • 除其他外,请查看CORS
  • 如果响应仅在 XML 中,您可以考虑创建一个 PHP 文件,该文件使用 cURL 执行请求并将原始脚本的 XML 回复更改为可以处理的 json 响应通过您的应用程序。所以:xml.php json.php $.ajax
  • 您是否将远程服务器控制到可以调整 CORS 策略的位置?如果不是,您是否是该数据的合法消费者,因此您可以要求该服务允许您遵守其 CORS 政策?
  • @Boaz 查看他们网站上给出的所有示例时,我注意到 ORIGIN 属性。只要它在那里,它就不会起作用。
  • @PENDO 对于一项简单的任务,这似乎需要做很多工作。你确定没有其他选择吗?

标签: jquery xml json request


【解决方案1】:

这不是我给定问题的实际解决方案。但这是一种使用PHP绕过起源的方法。

在我的 javascript 中,我使用以下内容请求了我的 PHP 代码:

function Communication () {

    this.global = new Global();

    this.allowedParameters = ["Character"];

    this.retrieveXMLFromRemoteServer = function (section, keyId, vCode) {
        if (this.global.arrayContainsValue(section, this.allowedParameters)) {
            $.get(this.formatCommunicationURL(section, keyId, vCode), function(data) {
                alert(data);
            });
        }
    }

    this.formatCommunicationURL = function (baseUri, keyId, vCode) {
        return "server/" + baseUri + ".php?keyId=" + keyId + "&vCode=" + vCode;
    }
}

调用例如:server/Character.php?keyId=00001&vCode=002342345234

PHP 文件包含以下代码:

<?php

namespace my_api; 

class Character {
    function retrieveCharacters ($keyId, $vCode) {
        return file_get_contents("https://external_url/Characters.aspx?keyId=" . $keyId . "&vCode=" . $vCode);
    }
}

$char = new Character();
echo $char->retrieveCharacters($_GET['keyId'], $_GET['vCode']);

?>

此文件从外部 URL 检索数据,然后将输出回显,以便 JS 可以使用响应文本。

希望这对你们中的一些人有所帮助

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2010-11-22
    • 2022-07-25
    • 1970-01-01
    相关资源
    最近更新 更多