【发布时间】:2013-09-11 19:50:33
【问题描述】:
环境:PHP 5.3.5 MySQL 服务器 5.5.8
创建了我的第一个 ajax 调用,经过多次确定,我得到了结果。结果似乎以字符串形式返回。当我要求时
alert(result[0]);
我只返回一个字符。
如果我尝试使用字段名称,则会返回 undefined 值。
这是我的 AJAX 的 javascript:
$.ajax({
type: "POST",
url: "models/ajaxHandler.php",
data: "handler=this&stu=21",
success: function(result){
if (result !== null)
{
alert(result + " " + result[0] +" " result['firstname']);
var obj = JSON && JSON.parse(result) || $.parseJSON(result);
alert(obj + " " + obj[0] + " " + obj['firstname']);
}
ShowDialog(false);
e.preventDefault();
},
error: function()
{
alert("ajax failure");
}
});
因此,一旦使用 PHP 中的 PDO 连接通过 fetchAll() 捕获到 mysql 的结果。我像这样从 php 返回结果:
echo json_encode($results);
结果返回的警报如下:
[{"firstname":"Test","0":"Test","lastname":"One","1":" 一个","id":"2","2":"2","st_usage_id":null,"3":null},{"firstname":" 先生","0":"先生","姓氏":"二","1":" 两个","id":"3","2":"3","st_usage_id":null,"3":null},{"firstname":" 先生","0":"先生","姓氏":"三","1":" 三","id":"5","2":"5","st_usage_id":null,"3":null}] [未定义
JSON 的解析将所有结果作为对象返回。
我也尝试过使用 php 返回结果:
print_r(json_encode($results));
它在上面显示相同的字符串。最后我用了
$var_dump(results);
这返回了以下内容:
array(3) {
[0]=>
array(8) {
["firstname"]=>
string(7) " DrTest"
[0]=>
string(7) " DrTest"
["lastname"]=>
string(4) " One"
[1]=>
string(4) " One"
["user_public_info_id"]=>
string(1) "2"
[2]=>
string(1) "2"
["st_usage_id"]=>
NULL
[3]=>
NULL
}
[1]=>
array(8) {
["firstname"]=>
string(3) " Dr"
[0]=>
string(3) " Dr"
["lastname"]=>
string(4) " Two"
[1]=>
string(4) " Two"
["user_public_info_id"]=>
string(1) "3"
[2]=>
string(1) "3"
["st_usage_id"]=>
NULL
[3]=>
NULL
}
[2]=>
array(8) {
["firstname"]=>
string(3) " Dr"
[0]=>
string(3) " Dr"
["lastname"]=>
string(6) " Three"
[1]=>
string(6) " Three"
["user_public_info_id"]=>
string(1) "5"
[2]=>
string(1) "5"
["st_usage_id"]=>
NULL
[3]=>
NULL
}
}
a undefined
我不确定我错过了什么,但我确信这很简单。我觉得我已经尝试了一切。请问谁能告诉我哪里出错了?
【问题讨论】:
-
我也尝试使用以下 sn-ps 遍历结果。结果总是返回 undefined (indefinitly) $.each(result, function (i, elem) { alert(elem.firstname); });
-
alert(obj[0]['firstname']) -
这是另一个尝试:result.foreach(function(entry){ alert(entry); });
-
也试过了。第二个警报不起作用。
-
谢谢。这确实是问题所在。我将 obj 的元素作为单个数组项访问。