【转】AJAX中JSON数据的返回处理问题
AJAX处理复杂数据时,便会使用JSON格式。常用在对数据库的数据查询上。在数据库查询到数据后,便可在处理页面直接将数据转为JSON格式,然后返回。
本篇主要讨论:jQuery中,JSON数据在AJAX回调函数中使用,可能出现的3个问题。
案例: $.ajax({
type:"post",
url:"check.php",
data:"findtext=yes&name="+$findWhat,
dataType:'json',
success:function(data){
//返回数据处理,以下所有代码运用于此
}
})
NO.1:
问题:
lert(data[0]); //---------->输出的是 { 或 [
很明显,问题出在dataType上。
原因:
虽然在处理页面已经对数据进行了处理,但在数据传输流中,JSON是以文本(字符串)方式进行传递,在ajax没有明确指明 数据类型(dataType)为json时,ajax接收到的实际上是一个类似于数组或对象的文本。
解决:
1、在回调函数中进行json对象的转化(此处不讨论)
2、最直接的方法是检查是否有dataType:'json',参数。
没有,加上便OK;
有,则检查dataType的字母、大小写是否有误。
NO.2:
(从数据库中查询到的数据,返回到ajax的json实际上是一个数组对象。是对象便可用 . 来获取数据)
问题:
for(var k in data){
alert(data.k);
}
//数据存在且返回正常,但用 . 来获取数据时,获取不到
原因:
数据库查询到的数据具有一个特质:第一个键为数字或数字型的字符串,其他键中则至少有一个是字符串。在转为json 时,只要有一个键为字符串,数据都会被自动返回json 对象{},非json数组[]。而js也同样是将json视为对象,因此data.k按 理说没有问题,但是别忘了,第一组键是数字或数字型的字符串,对象的是不能以数字作为属性的,即:data.0 非法。
解决:
改为 data[k] 即可。
再在for in 中加上:
$.each(data[k],function(index,item){
})
便可比较通用地使用数了。
NO.3:
(这个问题,主要是针对NO.2的)
问题:
for(var k in data){
$.each(data[k],function(index,item){
$('.findNei').append(item+'<br />');
})
}
在某个特定的环境下出现了以下的非期望值:
案例: $.ajax({
type:"post",
url:"check.php",
data:"findtext=yes&name="+$findWhat,
dataType:'json',
success:function(data){
//返回数据处理,以下所有代码运用于此
}
})
NO.1:
问题:
lert(data[0]); //---------->输出的是 { 或 [
很明显,问题出在dataType上。
原因:
虽然在处理页面已经对数据进行了处理,但在数据传输流中,JSON是以文本(字符串)方式进行传递,在ajax没有明确指明 数据类型(dataType)为json时,ajax接收到的实际上是一个类似于数组或对象的文本。
解决:
1、在回调函数中进行json对象的转化(此处不讨论)
2、最直接的方法是检查是否有dataType:'json',参数。
没有,加上便OK;
有,则检查dataType的字母、大小写是否有误。
NO.2:
(从数据库中查询到的数据,返回到ajax的json实际上是一个数组对象。是对象便可用 . 来获取数据)
问题:
for(var k in data){
alert(data.k);
}
//数据存在且返回正常,但用 . 来获取数据时,获取不到
原因:
数据库查询到的数据具有一个特质:第一个键为数字或数字型的字符串,其他键中则至少有一个是字符串。在转为json 时,只要有一个键为字符串,数据都会被自动返回json 对象{},非json数组[]。而js也同样是将json视为对象,因此data.k按 理说没有问题,但是别忘了,第一组键是数字或数字型的字符串,对象的是不能以数字作为属性的,即:data.0 非法。
解决:
改为 data[k] 即可。
再在for in 中加上:
$.each(data[k],function(index,item){
})
便可比较通用地使用数了。
NO.3:
(这个问题,主要是针对NO.2的)
问题:
for(var k in data){
$.each(data[k],function(index,item){
$('.findNei').append(item+'<br />');
})
}
在某个特定的环境下出现了以下的非期望值:
空白较多的7行数据为数据库数据,但遍历后的值中却多出了function....这样的多余的值。
原因:
尚不明确。
解决:
将forin改为一般的for循环。
喜欢本文章的朋友,欢迎关注公众号【程序员在职场】支持一下作者。
作者:程序员在职场
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。