无法将XMLHttpRequest.response解析为Object或Array

时间:2013-08-27 08:40:31

标签: php javascript ajax

我正在尝试刷新表格单元格的内容。因此,我有一个JavaScript,其中包含对.php文件的AJAX请求,该文件创建了我想通过JavaScript插入到我的表中的内容。 .php文件的最后一个命令类似于echo json_encode($result);

回到JavaScript中说:

var testarray = xmlhttp.response;
alert(testarray);

但警报的外观如下:

{"1":{"1":"3","2":"0","3":"2","4":"0"}}{"1":{"1":"3","2":"0","3":"2","4":"0"},"2":{"1":"2","2":"1","3":"1","4":"1"}}...    

因此,似乎变量testarray不是作为数组处理而是作为字符串处理。我已经尝试了var testarray = JSON.parse(xmlhttp.response),但这不起作用。 eval()也不起作用。

我不知道该怎么做,所以我的请求的反应就成了一个对象。

2 个答案:

答案 0 :(得分:1)

你的json有两件奇怪的事情:

  1. 这部分不是json有效的:...} {... 两个对象应该用逗号分隔

  2. 符号是字符串索引的对象,而不是带有int索引的数组 它应该是这样的:[[1,2,3,4],[5,6,7,8]]

  3. 对于点1.看起来你有一个连接许多json的循环

    表示点2.对象表示法可以用作数组,因此无关紧要

    一些代码:

        //the folowing code doesn't work: }{ is not parsable
    var a=JSON.parse('{"1":{"1":"3","2":"0","3":"2","4":"0"}}{"1":{"1":"3","2":"0","3":"2","4":"0"},"2":{"1":"2","2":"1","3":"1","4":"1"}}');
    
        //the folowing code work and the object can be used as an array
    var a=JSON.parse('{"1":{"1":"3","2":"0","3":"2","4":"0"},"2":{"1":"2","2":"1","3":"1","4":"1"}}');
    alert(JSON.stringify(a[1]));
    
    
        //the folowing code displays the real notation of a javascript array:
    alert(JSON.stringify([1,2,3,4]));
    

答案 1 :(得分:0)

我认为这里的问题可能是你的数组没有索引0。

e.g。如果你从服务器输出它 - 它会产生一个对象:

$result = [];
for ($i = 1; $i < 5; $i++) $result[$i] = $i;
echo json_encode($result);      // outputs an object

如果从服务器输出 - 它将产生一个数组:

$result = [];
for ($i = 0; $i < 5; $i++) $result[$i] = $i;
echo json_encode($result);     // produces an array

无论如何,即使您的服务器输出数组作为对象 - 您仍然可以在javascript中正常访问它:

var resp = xmlhttp.responseText,  // "responseText" - if you're using native js XHR
    arr = JSON.parse(resp);       // should give you an object
console.log(arr[1]);              // should give you the first element of that object