用这个ajax的封装,绝对没有问题
$ajax=function(){};
$ajax.ajax = function(ob){
if (!ob.url)
return;
var xmlhttp = (function(){
try {
return new XMLHttpRequest(); // Firefox,Opera 8.0+,Safari IE7
}
catch (e) {
if (window.ActiveXObject) {
var ActiveXName = ['MSXML2.XMLHttp.5.0','MSXML2.XMLHttp.4.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp','Microsoft.XMLHttp'];
for (var i = 0; i < ActiveXName.length; i++) {
try {
return new ActiveXObject(ActiveXName[i]); //Internet Explorer 5.0+
}
catch (e) {
return false;
}
}
}
else {
return false;
}
}
})();
var type = ob.type || "get";
var asyn = ob.asyn || true;
if (xmlhttp) {
xmlhttp.open(type,ob.url,asyn);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState != 4) {
//如果before在object内,就运行,否则就不运行
//一般用作loading
if (ob.before) {
ob.before();
}
}
else {
//这个success函数必须要有!
//注意,success函数传入了值进去
//或者仅仅把xmlhttp传入success也可以,然后在success的function里面写var tempText=xmlhttp.responseText 也可以的.
//或许这个以后会做修改,目前还是直接把返回的文本给success,因为这个还是很常用的
//如果新加入了一个xml,参数为true,说明传进来的是xml[这样的话就传xmlhttp,像怎样就怎样],默认是得到它的txt
ob.xml ob.success(xmlhttp) :ob.success(xmlhttp.responseText);
}
};
//这个好像可以解决IE ajax请求缓存的问题,如果不行,就把它注释吧,正在测试
xmlhttp.setRequestHeader("If-Modified-Since","0");
//xmlhttp.setRequestHeader("Cache-Control","no-cache");
xmlhttp.send(null);
}
else {
//如果error在obeject内,就运行,否则就不运行
if (ob.error) {
ob.error();
}
}
};