AJAX xmlHttp.readyState的返回值总是1
1个回答

用这个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();

}

}

};