首页 > 代码库 > 【转】AJAX中JSON数据的返回处理问题

【转】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 />‘);  
                          })  
                    }

                在某个特定的环境下出现了以下的非期望值:
技术分享
  
              空白较多的7行数据为数据库数据,但遍历后的值中却多出了function....这样的多余的值。
    原因:
                  尚不明确。
    解决:
               将forin改为一般的for循环。
 
技术分享

【转】AJAX中JSON数据的返回处理问题