使用ajax与后台交互时,很多情况都是使用json格式进行数据传递,后台使用json一般有两种方式:

            1.使用JSONObject。调用其fromObject方法,转化为单个的json对象。

            2.使用JSONArray。调用其fromObject方法,转化为json数组。

       对json的处理,有两种方式:

但如果是json数组,则不需要再加圆括号,js能把它作为json对象进行处理,原因可能是数组就是一个对象,或者js会自行当做对象处理,具体原因不详,不再需要转化为对象:




          var jsonObject = eval("("+ jsonFormat +")")


加圆括号的目的是迫使 eval 函数在评估 JavaScript 代码的时候强制将括号内的表达式(expression)转换为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如 若不佳加外层的括号,那么eval会将大括号之别为JavaScript代码块的开始结束标记机,那么{}将被认为是执行了一句空语句。所以下面两个执行 结果是不同的:


           alert(eval("{}")); //return undefined 
           alert(eval("({})")); //return [object Object]


      JSON 格式的名字部分为什么要加引号?因为eval函数会将{foo:"bar"}解释成合法的JavaScript 语句,而非表达式。但人们往往是想让eval将这段代码解释成一个对象。所以JSON 格式会强制你去在名字的外侧加上引号,再结合圆括号,eval就不会错误的将JSON解释成代码块。


//eval 错误解析语义 

            alert(eval('{foo:"bar"}')); //return "bar",incorrect 

            //eval 正确解析JSON 

            alert(eval('({"foo":"bar"})'));//return JSON object,correct



          因为eval函数会强制对参数进行运算,一般都使用parse()或者parseJson()方法,它们对传入的参数要求严格,必须传入json格式的字符串。

          2.后台在对json处理之后,设置response的contentType为json:

application/json;charset='UTF-8'");

客户端浏览器,会区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据,这样,返回到页面的已经是一个json对象了,就无需再使用eval()函数转化为json对象了。


       页面获取并处理了后台传入的json之后,就需要取得json中的数据进行一系列别的操作:

       1.如果返回的单个的json对象,直接使用点好运算符获取key的value便可。比如:

           var obj = eval('(' + str + ')');

           alert(obj.name);

alert(obj.sex);

   2.如果是返回的json数组,可以通过for循环依次获取json数组中的每一个对象的值:

     

var t2="[{name:'zhangsan',age:'24'},{name:'lisi',age:'30'},{name:'wangwu',age:'16'},{name:'tianqi',age:'7'}] ";  
var myobj=eval(t2);  
for(var i=0;i<myobj.length;i++){  
   alert(myobj[i].name);  
   alert(myobj[i].age);  
}




更简单的方式是使用jquery的$.each()函数处理json数组:

<script>
var obj = { one: 1, two: 2, three: 3, four: 4, five: 5 };
jQuery.each( obj, function( i, val ) {
$( "#" + i ).append( document.createTextNode( " - " + val ) );
});
</script>