代码改变世界

ajax和json

2013-01-15 16:25  臭小子1983  阅读(285)  评论(0编辑  收藏  举报

一、json的格式

1、var temp = {"aa":1, "bb":2, "cc":3};  // 带变量的json

2、{"aa":1, "bb":2, "cc":3};    // 不带变量的json

3、var temp = [{"aa":1, "bb":2, "cc":3},{"aa":1, "bb":2, "cc":3},{"aa":1, "bb":2, "cc":3}];  // 数组json

4、var temp = {"ab":{"platform_id":"qqq","platform_name":"sss"}, "cd":{"platform_id":"eee","platform_name":"fff"}}

 

二、读取json

注:

1、如果是带变量名的json

var temp = {"aa":1, "bb":2, "cc":3};  // 带变量的json

ajax("sss.json", function(data){

  // 将字符串转成对象,但json有变量名,转成对象就不用在给对象起名

  eval(data);

  for(var key in temp){  // temp为json内的变量名也是就是data对象的名

    alert(key)  // 输出aa, bb, cc

    alert(temp[key]);  // 输入 1,2,3

  }

});

 

2、如果json里没有声名变量

{"aa":1, "bb":2, "cc":3};

ajax("http://www.renren.com/data/json/data2.json", function(data){
    // json没有变量
    eval("var temp =" + data);    // 将字符串变成对象时赋个对象名
    for(var key in temp){
        alert(key);     // 返回 a b c
    }

    for(var key in temp){
        alert(temp[key]);   // 返回 12 34 56
    }
}

 

3、访问数组json

ajax("http://www.renren.com/data/json/data3.json", function(data){
	var str = "";
	// 读数据的json
	eval("var temp = " + data);
	
	for(var key in temp){
		for(var k1 in temp[key]){
			alert(k1);	// 每组json中的key	返回 platform_id platform_name platform_id platform_name platform_id platform_name
		}
	}
	
	for(var key in temp){
		str += temp[key].platform_id + "<br />";	// 获取数据指定key中的数据	
	}
	
	getID("da").innerHTML = str;

}, function(){
	alert("创建失败");
});

 

 4、获取json中的数组长度

var temp = {a:12, b:34, c:56};
ajax("http://www.renren.com/data/json/data1.json", function(data){
	var str = "";
	var s = getLen(data);
	alert(s);		// 返回3

}, function(){
	alert("创建失败");
});

function getLen(str){
	eval(str);
	var jsonLength=0;
	for(var key in temp){
		jsonLength++;
	}
	return jsonLength;
}

 

 

 示例:

function ajax(url, fnSucc, fnFaild){
	//1.创建Ajax对象
	var oAjax=null;		
	if(window.XMLHttpRequest){
		oAjax=new XMLHttpRequest();
	}
	else{
		oAjax=new ActiveXObject("Microsoft.XMLHTTP");
	}
	oAjax.open('GET', url, true);
	oAjax.send();

	oAjax.onreadystatechange=function (){
		if(oAjax.readyState==4){			
			if(oAjax.status==200){				
				fnSucc(oAjax.responseText);
			}
			else{				
				if(fnFaild){
					fnFaild(oAjax.status);
				}
			}
		}
	};
};

function getID(id){
	return document.getElementById(id);	
}

ajax("sss.json", function(str){
	var newTd = "";
	var newTh;
	var byId = getID("dataTab");
			
	eval(str);	// 将回调数据转成对
	// 表内容
	for(var key in temp){
		newTd += "<tr><td>" + key + "</td><td>" + temp[key]['platform_id'] + "</td><td>" + temp[key]['platform_name'] + "</td></tr>";
	}
	byId.innerHTML = newTd;
	
}, function(){
	alert("创建失败");
});

 

二、jquery中获取json和jsonp

1、无变量名json

{"aa":1, "bb":2, "cc":3}  // rrdata.json

$.ajax({
    url:"rrdata.json",
    type: "get",
    dataType:"json",        // 如果没有数据类型json中要写变量
    success: function(data){  // 返回的是object,而不是字符串所以不用eval data
        for(var i in data){
            alert(data[i]['platform_id']);    
        }
    }
});

 

2、有变量名的json

var data = {"aa":1, "bb":2, "cc":3}

$.ajax({
    url:"http://www.renren.com/data/rrdata.json",
    type: "get",
    // dataType:"json",        // 如果有变量名就可以不用写请求的数据类型
    success: function(data){
        alert(data);
        eval(data);
        for(var i in temp){
            alert(temp[i]['platform_id']);    
        }
    }
});

 

3、跨域请求jsonp

// 注意请求的json文件是不是以函数参数来加载json, gets('{"aa":1, "bb":2, "cc":3}');
function gets(data){ alert("aa"); alert(data); } $(function(){ $.ajax({ url:"http://interface.game.renren.com/ActivityCenter/?method=UserInfo.getReward2&catalog=plugins&gameid=lstx&aname=kuanian&aid=1026&uid=%22+getCookie%28%22id%22%29+%22&type=%22+type", type: "post", jsonpCallback:"gets", dataType:"jsonp", success: function(data){ eval(data); } }); });