创建一个XHR对象,在IE中会遇到3种不同版本的XHR对象,Firefox,Chrome,Safari,Opera等都支持原生的XHR对象,在这些浏览器中创建XHR对象要使用XMLHttpRequest构造函数。例如,创建一个通用的XHR对象。
function createXHR(){
if(typeof XMLHttpRequest !="undefined"){
return new XMLHttpRequest();
}else if(typeof ActiveXObject !="undefined"){
var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHTTP"];
for(var i=0;i<versions.length;i++){
try{
var xhr=new ActiveXObject(versions[i]);
arguments.callee.activeXString=versions[i];
return xhr;
}catch(ex){
}
}
return new ActiveXObject(arguments.callee.activeXString);
}else{
throw new Error("No XHR object available.");
}
}
在Ajax中,JSON对象有 parse()和stringify()两个方法、parse()方法接收两个参数json文本和一个可选的过滤函数、 parse()方法会返回传入数据的一个对象表示,即:
通过parse()方法,会把Json格式的字符串转换成相应的对象;
var jsonText="{\"name\":\"test\",\"age\":22,\"author\":true}";
var object=JSON.parse(jsonText,function(key,value){
switch(key){
case "age":return value+1;
case "author":return undefined;
default: return value;
}
});
alert("name:"+object.name+"age:"+object.age+"author:"+object.author);
以上代码、过滤函数会为每个 "age"值加1,会移除数据中的“author”键、其它值原样返回。
如果字符串保存的是多个json对象,则可以以以下方式进行保存:
var testDemo="[{\"name\":\"test1\",\"email\":\"http://www.baidu.com\"},{\"name\":\"test2\",\"email\":\"http://www.baidu2.com\"},{\"name\":\"test3\",\"email\":\"http://www.baidu3.com\"}]";
var contacts=JSON.parse(testDemo);
var list=document.getElementById("contacts");
for(var i=0;i<contacts.length;i++){
var li=document.createElement("li");
li.innerHTML="<a href=\"mailto:"+contacts[i].email+"\">"+contacts[i].name+"</a>"
list.appendChild(li);
}
首先把json格式的字符串通过parse()方法转换成对象,然后为每个对象依次创建li并输出到li元素上。
stringify()方法则是把一个对象转换成JSON字符串。这个方法接收3个参数:要序列化的对象,可选的替换函数(用于替换未受支持的JSON值)和可选的缩进说明符。
例如:
var contact={
name:"luoxufeng",
email:"http://www.test.com/"
};
var jsonText=JSON.stringify(contact);
alert(jsonText);
使用Post()请求并将JSON文本传递给Send()方法,可以将JSON数据发送给服务器。例如:
var xhr=createXHR();
var contact={
name:"luoxufeng",
email:"http://www.test.com/"
};
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status>=200){
alert(xhr.responseText);
}
}
};
xhr.open("post","/ajax/Json_stringify.aspx",true);
xhr.send(JSON.stringify(contact));
注:createXHR()即创建XHR对象,即本篇文章的第一个例子。