2015-09-04 40 views
3

我需要从外部文件获取数据;我试图做出一个Ajax请求,但我似乎只是将所有的数据作为一个字符串。我无法使用JSON.parse;我得到'未捕获的SyntaxError:意外的令牌'xmlhttp.onreadystatechange'。我知道这可能是因为我没有获取JSON数据。这是我到目前为止有:我可以在外部数组中使用JavaScript JSON.parse吗?

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']] 

如何获取所有数据从字符串中,或​​将其变成一个数组?我甚至尝试过使用分割功能,但我无法正确理解。

谢谢你的帮助!

+2

为什么'jquery'标签? – Andreas

+1

你不能返回有效的JSON吗?你可以尝试eval(),但它真的不是一个很好的练习,它会返回一个数组数组。 – PEM

回答

-2

也许这是一项工作,但它有可能逃避字符串中的引号?然后它将能够解析。

例子:发送从PHP以下回应:

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

然后,它应该能够使用JSON.parse()来

只要确保你没有换行符在你的回应解析。

+0

['json_encode()'](http://php.net/manual/en/function.json-encode.php) – Andreas

+0

为什么不用你所有的变量创建一个标准的PHP数组并使用'json_encode()'作为@安德烈亚斯建议。这个答案的建议会好得多。它将被正确格式化,并且不需要转义双引号,就像这样! – mic

0

更新

如果您在Users.php的掌控权,那么你可以使用json_encode()上的数据解决问题。这将使使用双引号包裹字符串和导致正是我下面提出不更换()

以前

JSON将字符串用双,而不是单引号包围。

所以一个黑客会JSON.parse(data.replace("'", '"'))

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

相关问题