返回信息流//xmlHttpRequest pool xmlhttp请求池
var XMLHttp = {
_objPool: [],
_getInstance: function ()
{
for (var i = 0; i < this._objPool.length; i ++)
{
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4)
{
return this._objPool[i];
}
}
this._objPool.push(this._createObj());
return this._objPool[this._objPool.length - 1];
},
_createObj: function ()
{
if (window.XMLHttpRequest)
{
alert("new XMLHttpRequest not via AjectiveXObject");
var objXMLHttp = new XMLHttpRequest();
}
else
{
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for(var n = 0; n < MSXML.length; n ++)
{
try
{
var objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch(e)
{
}
}
}
// mozilla某些版本没有readyState属性
if (objXMLHttp.readyState == null)
{
objXMLHttp.readyState = 0;
objXMLHttp.addEventListener("load", function ()
{
objXMLHttp.readyState = 4;
if (typeof objXMLHttp.onreadystatechange == "function")
{
objXMLHttp.onreadystatechange();
}
}, false);
}
return objXMLHttp;
},
// 发送请求(方法, 地址, 数据, 回调函数)
sendReq: function (method, url, data, callback)
{
var objXMLHttp = this._getInstance();
with(objXMLHttp)
{
try
{
// 加随机数防止缓存
if (url.indexOf("?") > 0)
{
url += "&randnum=" + Math.random();
}
else
{
url += "?randnum=" + Math.random();
}
open(method, url, true);
// 设定请求编码方式
//setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
send(data);
onreadystatechange = function ()
{
alert(url);
if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 0))
{
alert("readyState = 4");
alert("before callback, objXMLHttp.responseText = " + objXMLHttp.responseText);
callback(objXMLHttp);
}
else if(objXMLHttp.readyState != 4)
alert("xmlHttpRequest readyState = " + objXMLHttp.readyState);
else
alert("xmlHttpRequest not success!");
}
}
catch(e)
{
alert(e);
}
}
}
};
//以下是发送登陆请求和结果解析的代码
function testLogin() {
alert("testlogin");
var url = "http://" + IPServer + ":" + PORT + "/ProjectX/user/vLogin?devId=" + 354705040973295;
XMLHttp.sendReq("GET", url, "", loginAnalytic);
}
function loginAnalytic(objXMLHttp) {
alert("loginAnalytic!");
alert("objXMLHttp.readyStatus: ") + objXMLHttp.readyStatus;
alert("objXMLHttp.responseText: " + objXMLHttp.responseText); //问题来了,在IE8里这个能显示返回的结果,<user><id>***</id>......</user>,但是在Firefox里这里是空字符串,为什么呢?有什么解决办法??直接在浏览器地址栏里输入上面的请求url地址,服务器也能返回正常的xml字符串
//解析结果
if(window.ActiveXobject){
var ARR_ACTIVEX = ["MSXML4.DOMDocument", "MSXML3.DOMDocument", "MSXML2.DOMDocument", "MSXMLDOMDocument", "Microsoft.XMLDOM"];
//xmlDOM是否建立成功的标识
var xmlDomFlag = false;
for(var i = 0; i < ARR_ACTIVEX.length; i++)
{
try{
var objXML = new ActiveXObject(ARR_ACTIVEX[i]);
xmlDoc = objXML;
xmlDomFlag = true;
}
catch(e){
}
}
if(xmlDoc)
{
xmlDoc.async = false;
xmlDoc.loadXML(objXMLHttp.responseText);
}
}
else if(window.DOMParser)
{
parser = new DOMParser();
xmlDoc = parser.parseFromString(objXMLHttp.responseText, "text/xml");
}
else
{
alert("浏览器不支持XML解析!")
return;
}
var nowNode = xmlDoc.getElementsByTagName("id")[0];
if(nowNode)
{
loginId = nowNode.firstChild.nodeValue;
alert("loginId: " + loginId);
}
else
{
alert("登陆异常!");
return;
}
alert("loginId" + loginId);
}
问题看上面的红色注释部分,在IE中收到的objXMLHttp.responseText是正常的,在Firefox和Chrome中都收不到(为空),但是readyStatus都是4,及响应完成,很奇怪?哪里出了错?求高手指教,万分感谢!
这是一条镜像帖。来源:北邮人论坛 / www-technology / #16209同步于 2012/5/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
ajax请求得到的responseText为空
Rurouni
2012/5/14镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。