ajax数据[0]未定义
ajax data[0] is undefined
我使用 ajax 从 php 中的 sql 查询中获取行数 (COUNT(*))。
Firefox 网络选项卡中的 JSON return 是:
[{"number":2}],
(2 没有引号)
但是在 "ajax success" 中,当我尝试从数据 [0]["number"] 或 data.length 中获取值 (2) 时,它 returns "undefined".
只有当我将 JSON 解析为对象时它才有效。
$.ajax({
url: 'queries.php?q=count',
type: 'post',
//data: data,
datatype: 'json',
success: function(data) {
//var dataobject = jQuery.parseJSON(data);
//console.log(dataobject);
//var var2 = dataobject[0].number; ---->THIS WORKS!
//alert(JSON.parse(data).length); ---->THIS WORKS!
//console.log(data.length); ---->Undefined
console.log(typeof data); ---->string
console.log(data[0]["number"]);---->Undefined,i want this to work!!!
}
});
Thw SQL 我在 php 中使用的是:
switch ($_GET["q"]) {
case "count":
$sql = "SELECT count(*) as number from
(SELECT Employees.emp_username, .............
where Employees.emp_username = ? and Year(emp)=2016 and Month(emp)= MONTH(getdate()) ) as rows1 ";
$stmt = sqlsrv_prepare( $conn, $sql , array(&$_SESSION["username"] ));
break;
default: header("Location: index.php"); }
if( !$stmt ) { die( print_r( sqlsrv_errors(), true)); }
sqlsrv_execute($stmt);
$rows = array();
if(sqlsrv_execute($stmt)){
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$rows[] = $row; }
} else{
die( print_r( sqlsrv_errors(), true));
}
print json_encode($rows);
您的变量类型是字符串。你必须先解析它。
$.ajax({
url: 'queries.php?q=count',
type: 'post',
//data: data,
datatype: 'json',
success: function(data) {
//var dataobject = jQuery.parseJSON(data);
//console.log(dataobject);
//var var2 = dataobject[0].number; ---->THIS WORKS!
//alert(JSON.parse(data).length); ---->THIS WORKS!
//console.log(data.length); ---->Undefined
console.log(typeof data); ---->string
data = JSON.parse(data);
console.log(data[0]["number"]);---->Undefined,i want this to work!!!
}
});
您必须首先解析数据,就像您对 jQuery.parseJSON(data)
所做的那样,或者像在警报 JSON.parse(data)
中所做的那样。
data
是一个字符串对象,因此当您访问元素 [0]
时,您将获得字符串的第一个字符。在您的示例中:[
。这是 string [{"number":2}]
.
的第一个元素
我的建议是将 [0]['number'] 应用于 dataobject
,因此您的代码应如下所示:
$.ajax({
url: 'queries.php?q=count',
type: 'post',
//data: data,
datatype: 'json',
success: function(data) {
var dataobject = jQuery.parseJSON(data);
console.log(dataobject[0]["number"]);
}
我使用 ajax 从 php 中的 sql 查询中获取行数 (COUNT(*))。
Firefox 网络选项卡中的 JSON return 是:
[{"number":2}],
(2 没有引号)
但是在 "ajax success" 中,当我尝试从数据 [0]["number"] 或 data.length 中获取值 (2) 时,它 returns "undefined".
只有当我将 JSON 解析为对象时它才有效。
$.ajax({
url: 'queries.php?q=count',
type: 'post',
//data: data,
datatype: 'json',
success: function(data) {
//var dataobject = jQuery.parseJSON(data);
//console.log(dataobject);
//var var2 = dataobject[0].number; ---->THIS WORKS!
//alert(JSON.parse(data).length); ---->THIS WORKS!
//console.log(data.length); ---->Undefined
console.log(typeof data); ---->string
console.log(data[0]["number"]);---->Undefined,i want this to work!!!
}
});
Thw SQL 我在 php 中使用的是:
switch ($_GET["q"]) {
case "count":
$sql = "SELECT count(*) as number from
(SELECT Employees.emp_username, .............
where Employees.emp_username = ? and Year(emp)=2016 and Month(emp)= MONTH(getdate()) ) as rows1 ";
$stmt = sqlsrv_prepare( $conn, $sql , array(&$_SESSION["username"] ));
break;
default: header("Location: index.php"); }
if( !$stmt ) { die( print_r( sqlsrv_errors(), true)); }
sqlsrv_execute($stmt);
$rows = array();
if(sqlsrv_execute($stmt)){
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$rows[] = $row; }
} else{
die( print_r( sqlsrv_errors(), true));
}
print json_encode($rows);
您的变量类型是字符串。你必须先解析它。
$.ajax({
url: 'queries.php?q=count',
type: 'post',
//data: data,
datatype: 'json',
success: function(data) {
//var dataobject = jQuery.parseJSON(data);
//console.log(dataobject);
//var var2 = dataobject[0].number; ---->THIS WORKS!
//alert(JSON.parse(data).length); ---->THIS WORKS!
//console.log(data.length); ---->Undefined
console.log(typeof data); ---->string
data = JSON.parse(data);
console.log(data[0]["number"]);---->Undefined,i want this to work!!!
}
});
您必须首先解析数据,就像您对 jQuery.parseJSON(data)
所做的那样,或者像在警报 JSON.parse(data)
中所做的那样。
data
是一个字符串对象,因此当您访问元素 [0]
时,您将获得字符串的第一个字符。在您的示例中:[
。这是 string [{"number":2}]
.
我的建议是将 [0]['number'] 应用于 dataobject
,因此您的代码应如下所示:
$.ajax({
url: 'queries.php?q=count',
type: 'post',
//data: data,
datatype: 'json',
success: function(data) {
var dataobject = jQuery.parseJSON(data);
console.log(dataobject[0]["number"]);
}