使用ajax与后台交互时,很多情况都是使用json格式进行数据传递,后台使用json一般有两种方式:
1.使用JSONObject。调用其fromObject方法,转化为单个的json对象。
2.使用JSONArray。调用其fromObject方法,转化为json数组。
对json的处理,有两种方式:
1.如果后台是直接将json转为字符串放回到页面,页面通过js使用json,很多都是通过使用js的evel()方法将服务器端构建好的 JSON 数据转换为可用的 JavaScript 对象。在转化的时候需要将 JSON 字符串的外面包装一层圆括号,但如果是json数组,则不需要再加圆括号,js能把它作为json对象进行处理,原因可能是数组就是一个对象,或者js会自行当做对象处理,具体原因不详,不再需要转化为对象:
alert(eval("{}")); //return undefined
alert(eval("({})")); //return [object Object]
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:
response.setContentType("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>