通过ajax响应将数组从php传递到javascript

时间:2014-04-22 02:01:55

标签: javascript php ajax

这是我在stackoverflow中的第一篇文章。我总是从之前发布的问题中得到答案。这个问题一直困扰着我,我尝试过的所有解决方案都没有用。

我有一个js函数,该函数发出ajax请求以获取城镇的天气信息:

var _getWeatherInfo = function(ntown){
  var town = ntown;
  var url = "PHP/weather.php?town=" + town;
  request1.onreadystatechange = _refreshWeatherList();                    
  request1.open("GET", url, true);
  request1.send("");
}

我使用以下php代码返回存储在数组中的sql结果:

<?php
    //Connection to the database
    $mysql = mysql_connect("localhost","xuvaz","x");

    //Selecting Database
    $db = mysql_select_db("weather");

    $town = $_GET['town'];
    $tarray = array();

    $sql1= mysql_query("SELECT * FROM weather WHERE town='$town'");

    while($row = mysql_fetch_assoc($sql1)) {
    $tarray =  array('town' => $row['town'],'outlook' => $row['outlook']);
    }

    echo json_encode($tarray);
?>

然后我有一个在请求完成时调用的函数:

   var _refreshWeatherList = function() {
        var weather_info = request1.responseText;
        for(var i = 0; i < weather_info.length; i++){
            var wtown = weather_info[i].town;
            var woutlook = weather_info[i].outlook; 
            var wmin = weather_info[i].min_temp;
            var wmax = weather_info[i].max_temp;
        }
        var wLine = new WLine(wtown, woutlook, wmin, wmax);
        _weather.push(wLine);
    _refreshWeatherDisplay();
   }

问题是我无法访问数组值。

我可以在响应中看到firebug中的{"town":"Christchurch","outlook":"fine"}值。

即使我使用JSON解析,它也会在firebug JSON.parse: unexpected end of data中出错。如果 我可以访问整个项目完成的数据。

3 个答案:

答案 0 :(得分:0)

var _refreshWeatherList = function() {
    var weather_info = eval("("+request1.responseText+")");
    for(var i = 0; i < weather_info.length; i++){
        var wtown = weather_info[i].town;
        var woutlook = weather_info[i].outlook; 
        var wmin = weather_info[i].min_temp;
        var wmax = weather_info[i].max_temp;
    }
    var wLine = new WLine(wtown, woutlook, wmin, wmax);
    _weather.push(wLine);
_refreshWeatherDisplay();}

&#39; request1.responseText&#39;必须是&#39;对象&#39;使用eval() - !我的英语不太好

答案 1 :(得分:0)

您的PHP代码返回一个对象(循环的最后一行)而不是一个对象数组,但您的JavaScript需要一个数组。

将PHP更改为以下内容以适用于$tarray

while($row = mysql_fetch_assoc($sql1)) {
    $tarray[] =  array('town' => $row['town'],'outlook' => $row['outlook']);
}

您的JavaScript需要等待readyState = Loaded并对responseText进行JSON解码:

var _refreshWeatherList = function() {
    if(request1.readyState == 4) {
        var weather_info = JSON.parse(request1.responseText);
        ....
    }
}

如果解析失败,请尝试将其记录到控制台,以确保PHP不会返回额外的字符。

答案 2 :(得分:0)

感谢您的帮助。我发现了这个错误。我忘了包括这两行。

if (request1.readyState == 4) {
    if (request1.status == 200){