这是我在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
中出错。如果
我可以访问整个项目完成的数据。
答案 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){