JSON.parse(xmlhttp.responseText)返回空

时间:2015-12-04 17:25:11

标签: javascript php json ajax

我正在使用Ajax。我的search.php包含javascript代码。它请求content.php回显一个数组$res,其中包含"key" : value形式的值。

content.php:

echo json_encode($res);

的search.php:

 <!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"> </script>
 <script type="text/javascript">

var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

alert(xmlhttp.responseText); //this alerts the correct content of $res but along with all the HTML page codes
var array = JSON.parse(xmlhttp.responseText); //also tried json_decode(xmlhttp.responseText, true); and jQuery.parseJSON( xmlhttp.responseText );
alert(array); // this doesn't alert at all
}
}
xmlhttp.open("GET", "<?php echo   @$this->config->base_url();  ?>index.php/content.php", true);

xmlhttp.send();

</script>

但是,当我在单独的页面中单独打印$res时,它会显示正确的输出:

{"1894":1,"1905":0,"1916":0,"1927":0,"1938":0,"1949":0,"1960":0,"1971":0,"1982":0,"1993":0,"2004":1,"2015":2}

我试图遍历数组:

var array = JSON.parse(xmlhttp.responseText);

for(var index in array) {

 alert(index+ " is: "+ array[index]);
}

但这也没有提醒任何事情。 我已经尝试了几天,但却找不到合适的解决方案。

修改

这是alert(xmlhttp.responseText)

的输出

part 1 of the alert window

part 2 of the alert window

无法发布两个以上的链接(因为我没有足够的声誉),无论如何你都可以瞥见它,我相信。

2 个答案:

答案 0 :(得分:1)

根据我在两个图像中看到的内容,您的PHP在JSON对象之后为您提供HTML代码,这可能是阻止您解析它的问题。确保在回显$res后结束PHP执行。换句话说,试试这一行:

echo json_encode($res);exit;

此外,如果不起作用,请将alert(xmlhttp.responseText)更改为console.log(xmlhttp.responseText),检查浏览器控制台并在此处复制从服务器返回的所有文本

答案 1 :(得分:-1)

<script type="text/javascript">
    var url=<?php echo "'" . $this->config->base_url() . 'index.php/content.php';?>;
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {/* this was unclosed */
        if( xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
            var r=xmlhttp.responseText;
            console.info('ajax response: %s ',r);
            var array = JSON.parse(r);
        }
    }
    xmlhttp.open( "GET", url, true );
    xmlhttp.send();
</script>