p.responseText);
}
else{
alert("AJAX服务器返回错误!");
}
}
}
xmlhttp.send();//发送请求,发出请求后不等服务器返回数据,代码继续向下执行,所以不会发生阻塞,不会“卡”
//简单的AJAX封装代码
function ajax(url,onsucess,onfail){
var xmlhttp = window.XMLHTTPRequest?new XMLHTTPRequest():new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST",url,true);
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
onsucess(xmlhttp.responseText);
}
else{
onfail(xmlhttp.status);
}
}
}
xmlhttp.send();
}
三十三、Json
Json就是java script对象或者数组格式的字符串,Http协议不能传递java script对象,所以需要转换为字符串进行传输,需要JSON
Json(一个标准,规定了对象以什么样的数据格式保存为一个字符串)将复杂对象序列化为一个字符串,在浏览器端再讲字符串反序列化为java script可以读取的对象。
示例代码:
java script对象:
var persons = {name:'rupeng',age:8};
java script数组:
var names = ['rupeng','baidu','qq'];
java script对象数组:
var persons = [{name:'rupeng',age:18},{name:'baidu',age:1},{name='qq',age:19}];
三十四、Json的转换
json字符串转换为js对象:使用eva l()函数,
eva l()函数不安全?
因为是动态执行解析代码,存在风险漏洞
var obj = eva l("a("+data+")");
示例代码:
1,在java script中的Json对象的转换过程:
var persons = [{name:'rupeng',age:19},{name:'baidu',age:17},{name:'taobao',age:10}];//定义JS中的一个对象数组
//json就是一种格式,在js中将JS中的对象按照字符串的形式进行封装
var jsonPsersons = "[{name:'rupeng',age:19},{name:'baidu',age:17},{name:'taobao',age:10}]";
//使用eva l()函数将json字符串转换回js对象或者对象数组
var personsOut = eva l("("+persons+")");//将json字符串加上小括号,传递给eva l函数,就得到了js对象
//输出这个对象数组
for(var i = 0;i<personsOut.length;i++){
alert(personsOut[i].name+"="+personsOut[i].age);
}
2,在C#中 .NET对象序列化为Json字符串的方法:
第一步,将,.NET对象序列化,转化为Json字符串
第二步,将Json字符串转化为js对象,进行处理
示例代码:
第一步:
string strs = {"rupeng.com","baidu.com","taobao.com"};//字符串对象
java scriptSerializer jss = new java scriptSerializer();//创建序列化器的对象
string json = jss.Serialize(strs);//进行序列化
context.Response.Write(json);//将序列化后的json字符串返回给浏览器
第二步,在html文件中,对json字符串进行解析,执行JS操作
<script type="text/java script">
ajax("JsonTest2.ashx",
function (data) {
var strs = eva l("("+data+")");
for (var i = 0; i < strs.length; i++) {
alert(strs[i]);
}
},
function () { alert("错误"); })
</script>
三十五、JQuery封装的AJAX
示例代码:
$.ajax({
type:"post",url:"一般处理程序.ashx",
success:function(data){
alert(data);},
error:function(){alert("错误");}
});
ajax方法的参数就是一个字典,
最好设定post提交,data为提交的报文体,
success为请求成功的处理事件,
error为请求通讯失败的处理事件(服务器错误,404等)
三十六、JQuery AJAX Json处理
可以使用$.parseJSON()方法,把json字符串解析为java script对象,比eva l()方法安全
如果设定ajax请求的ContextType为“application/json”或者ajax请求中设定datatype:"json",
那么success的第一个参数就是java script对象,不用手动去解析了
代码示例:
$.ajax({
type:"post",datatype:"json",
data:{i1:$("#txt1").val(),i2:$("#txt2").val()},
success:function(){},
error:function(){alert("错误");}
});
ajax的业务错误处理:
error事件时通讯错误、服务器错误等。
表单序列化:(在form场景下,如果表单很多,可以使用序列化的方式,如果不是form方式则不需要考虑)
如果表单元素放到了form中,并且按照http的标准(设置了name属性),
那么使用$("#form1").serializeArray()方法,就可以得到一个键值对数组,
把这个值赋值给$.ajax的data属性。
实现了整个form表单的元素的序列化,ajax数据处理
全局