【问题标题】:Can I use JavaScript JSON.parse with an external array?我可以将 JavaScript JSON.parse 与外部数组一起使用吗?
【发布时间】:2015-11-30 19:53:10
【问题描述】:

我需要从外部文件中获取数据;我试图发出 ajax 请求,但我似乎只将所有数据作为字符串获取。我在使用 JSON.parse 时遇到问题;我得到 'Uncaught SyntaxError: Unexpected token 'xmlhttp.onreadystatechange'。我知道这可能是因为我没有收到 JSON 数据。这是我目前所拥有的:

function loadXMLDoc() {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var data = xmlhttp.responseText;
            var jn = JSON.parse(data);
            document.getElementById("output").innerHTML = jn;
        }
    }
    xmlhttp.open("GET", "Users.php", true);
    xmlhttp.send();
}
window.onload = loadXMLDoc;

这是我从“Users.php”中得到的字符串,而不是数组:

[['@user1',238,'img/user1.jpeg'],['@user2',220,'img/user2.jpeg'],['@user3',180,'img/user1.jpeg']]

如何从字符串中检索所有数据,或将其转换为数组?我什至尝试过使用拆分功能,但我无法正确使用。

感谢您的帮助!

【问题讨论】:

  • 为什么是jquery 标签?
  • 您不能改为返回有效的 JSON?你可以试试 eval() 但这真的不是一个很好的做法,它会返回一个数组数组。

标签: javascript php arrays json


【解决方案1】:

这可能是一项工作,但您可以转义字符串中的引号吗?然后就可以解析了。

示例:从您的 PHP 发送以下响应:

[[\"@user1\",238,\"img/user1.jpeg\"],[\"@user2\",220,\"img/user2.jpeg\"]]

那么它应该可以使用 JSON.parse() 进行解析

请确保您的回复中没有换行符。

【讨论】:

  • 为什么不创建一个包含所有变量的标准 PHP 数组,并按照 @Andreas 的建议使用 json_encode()。这个答案所暗示的会好得多。它将被正确格式化,并且不需要像这样转义双引号!
【解决方案2】:

更新

如果您可以控制 Users.php,那么您可以通过对数据使用 json_encode() 来解决问题。这将使用双引号来包装字符串,并在没有替换()的情况下得到我在下面建议的内容

以前

json 期望字符串被双引号包围,而不是单引号。

所以黑客应该是JSON.parse(data.replace("'", '"'))

如果返回的字符串中有任何双引号或转义的单引号,你当然可以绊倒。

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多