ie使用的是ActiveXObject
javascript
其余浏览器是XMLHttpRequest
这里就有兼容性问题,对于不一样的浏览器有不一样的解决办法,底层的解决办法是:
html
function getxhr() { var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHttp"); } return xhr; }java
例如:
var xhr = getXhr();
ajax
xhr.open("get","check_uname.do?uname=tom&age=18", true);
第一个参数是请求方式
第二个参数是请求地址
第三个参数是是否发送异步请求,通常都是true
若是是false,发送请求的时候,页面不会消失,但是浏览器会锁定当前页面,用户不可以对当前页面作其余操做
编程
xhr.onreadystatechange=function1;
绑定一个事件,在状态转换的时候会调用这个函数json
xhr.send(null);数组
xhr.open("post", "get_luckyNum.do", true);
复制代码
三个参数和get差很少同样,不过在请求地址中,再也不加入参数,这个参数会加载在最后的send里面浏览器
xhr.send("name=mackyhuang");
复制代码
这是第一个不一样点
而后须要加上一个请求头
(按照http协议,若是发送的是post请求,那么在请求数据包中应该带有conntent-type请求头)默认状况下,ajax不会带有请求头,因此须要缓存
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
复制代码
一般不须要返回完整的页面,只须要返回部分数据
服务器
就是那个事件处理函数
function function1()
{
//获取服务器返回的数据
if(xhr.readyState == 4 && xhr.status == 200)
{
var txt = xhr.responseText();
用txt的文件修改页面内容
}
}
复制代码
设置响应函数
<input id="username" type="text" name="username" onblur="check_name();">
复制代码
function check_name() {
var username = document.getElementById("username").value;
var msg = document.getElementById("msg");
var xhr = getxhr();
xhr.open("get", "check_login.do?username=" + username, true);
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && xhr.status == 200)
{
var txt = xhr.responseText;
msg.innerHTML = txt;
}
};
xhr.send(null);
}
复制代码
####post请求方式函数具体代码
function get_num()
{
var pLable = document.getElementById("lucky");
var xhr = getxhr();
xhr.open("post", "get_luckyNum.do", true);
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200)
{
var txt = xhr.responseText;
pLable.innerHTML = txt;
}
};
xhr.send("name=mackyhuang");
}
复制代码
在使用ie浏览器发送get方式给ajax请求的时候,会有缓存问题 ,即只有第一次点击有效,接下来的每一次点击都没有响应 ,由于ie会判断请求地址是否访问过,若是访问过就会调用上次访问的结果来显示。
解决方式是在请求地址后方加上?随机数
是一种轻量级的数据交换格式 相对于xml来讲,是轻量级的,解析速度更快,文档更小
须要一个包 json-lib
JSONObject jsonObject = JSONObject.fromObject(people);
return jsonObject.toString();
JSONArray jsonObject = JSONArray.fromObject(arrayList);
return jsonObject.toString();
复制代码
包中的类 JSONObject 和 JSONArray, 分别是须要生成单个json,和json数组
javascripe的内置对象JSON,须要他的一个方法,parse():
var object = JSON.parse(jsonString);
复制代码
<script type="text/javascript">
$(function(){
setInterval(do_query, 5000);
});
function do_query()
{
$("#tb1").empty();
$.ajax({
"url":"query.do",
"type":"post",
"dataType":"json",
"success":function(books){
$("#tb1").empty();
//alert(books);
for(var i = 0; i < books.length; i++)
{
var book = books[i];
$("#tb1").append("<tr><td>" + book.name + "</td><td>"
+ book.price + "</td><td>" +
book.page + "</td></tr>");
}
}
})
}
</script>
复制代码
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String path = request.getRequestURI();
String action = path.substring(path.lastIndexOf("/"), path.lastIndexOf("."));
System.out.println(action);
PrintWriter printWriter = response.getWriter();
if("/query".equals(action))
{
ArrayList<Book> books = new ArrayList<Book>();
Random random = new Random();
for(int i = 0; i < 8; i++)
{
books.add(new Book("Java企业级应用开发" + random.nextInt(8888),
88, 189 + random.nextInt(8888)));
}
JSONArray jsonArray = JSONArray.fromObject(books);
String json = jsonArray.toString();
System.out.println(json);
printWriter.print(json);
}
复制代码
这是一个轻量级的ajax请求函数,
使用状况是,须要直接将返回的参数添加到一个标签上面的时候
在服务器端编写代码,而后在jsp中
$("#lucky").load("get_luckyNum.do");
复制代码