对于ajax,我分几个点来说(这些只是在我看来,有出入的地方请大家指正):
1、用途(我所看到的):对于我这种不到迫不得已不去接受新知识的人来说,ajax最大的优点在于无刷新更新页面信息;
症状:控件响应服务端程序后,总会刷新页面,造成页面有短暂的百页情况,这个不是我们要的效果。
预期:实现局部刷新,消除百页现象;
2、用法(2天成效):
只看了两天,没有什么太高深的用法,但是有些东西确实摸索了很多,我先说一下吧。我的开发环境是VS2008;采用的是C#的DOTNET框架,脚本采用JQuery框架。我也看了一些网上的W3Cschool的教程,他是这样写的:
function loadXMLDoc(url, cfunc) {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = cfunc;
xmlhttp.open("post", url, true);
xmlhttp.send();
}
function myFunction() {
loadXMLDoc('/Ajax/CardInfo_ajax.ashx?pageName=cardInfo', function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$("#content").html("");
$("#content").html(xmlhttp.responseText);
}
});
}
网上有详细解释,我就大概解释一下:这里是封装了一个回调函数,但其实就是先申请xmlhttp对象,由他根据url等参数调用相应的异步响应程序,然后由对应程序通过response对象返回到responseText里面,然后通过$("#id").html;或者通过返回的json数据格式,自行前台拼接就可以了;
然后看了看JQuery的ajax调用方法,省下不少代码呀:
$("#Button1").click(function() {
var options = {
cache: true,
type: "get",
url: "/AJAX/CardInfo_ajax.ashx?pageName=cardInfo",
async: true,
contentType:"json",
error: function(request) {
alert("Connection error");
},
success: function(data) {
if (data.length > 0){
// $("#table_info").html("");
// $("#content").html(data); <!--第一种方法-->
// var a = data;
eval("a="+data);
<span style="white-space:pre"> </span>alert(a.people[0].lastName);<span style="white-space:pre"> </span><!--第二种方法--><span style="white-space:pre"> </span>
}
},
};//option结束
$.ajax(options);
return false;
});
我后台是这样给出的:
string json = "{ \"people\": ["+
"{ \"firstName\": \"Brett\", \"lastName\":\"McLaughlin\", \"email\": \"aaaa\",\"color\":\"red\" }," +
"{ \"firstName\": \"Jason\", \"lastName\":\"Hunter\", \"email\": \"bbbb\",\"color\":\"red\"}," +
"{ \"firstName\": \"Elliotte\", \"lastName\":\"Harold\", \"email\": \"cccc\",\"color\":\"blue\" }]}";
//ajax_ret(context,getTableData());
context.Response.ContentType = "application/Json";
context.Response.Write(json.ToString());
context.Response.End();
注意,虽然不知道为什么,但是我VS2008后台这个response.ContentType = "application/Json"写成"application/json"是无效的,程序会在response.end处中止。注意大小写,这是其一。第二,注意,我这里后台虽然是命名json,但是本质依然是字符串,想要获取到json格式,我是通过js里的eval方法转换的。
这样就获取到json数据串了,大家有什么好的建议也可以告诉我,我认为,这是最笨的c#里面ajax与后台之间进行通讯的方式。