简单的不能再简单的AJAX原型调了1天了,还是只执行一次回调,请帮忙解决!
test.asp
<script>
var xmlHttpWL = false;
try {
xmlHttpWL = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttpWL = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttpWL = false;
}
}
if (!xmlHttpWL && typeof XMLHttpRequest != 'undefined') {
xmlHttpWL = new XMLHttpRequest();
}
var xmlHttpWL01 = false;
try {
xmlHttpWL01 = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttpWL01 = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttpWL01 = false;
}
}
if (xmlHttpWL01 && typeof XMLHttpRequest != 'undefined') {
xmlHttpWL01 = new XMLHttpRequest();
}
function add()
{
url = "Test_duibi.asp?action=setstr&pname="+document.getElementsByName("pname")[0].value;
xmlHttpWL.open("GET", url, true);
xmlHttpWL.send(null);
}
function get()
{
url = "Test_duibi.asp";
xmlHttpWL01.onreadystatechange = setTable;
xmlHttpWL01.open("GET", url+"?t="+Math.random(), true);
xmlHttpWL01.send(null);
}
function setTable()
{
if (xmlHttpWL01.readyState == 4)
{
if (xmlHttpWL01.status == 200)
{
var ss = xmlHttpWL01.responseText;
alert(ss);
}
}
}
</script>
<INPUT TYPE="text" NAME="pname" > <INPUT TYPE="button" value="set" onclick="add();"> <INPUT TYPE="button" value="get" onclick="get();">
<%
response.write("Cookies="&Request.Cookies("WL_DuiBi"))
%>
================================
Test_duibi.asp
====================
<%@ LANGUAGE = VBScript codepage=65001%>
<%
response.charset="utf-8"
Response.Buffer = True
response.expires=0
Response.CacheControl="no-cache "
Response.AddHeader "Pragma","no-cache"
Select Case request("action")
Case "setstr" : setstr()
Case Else
getstr()
End Select
Sub setstr()
response.cookies("WL_DuiBi")=Trim(request("pname"))
End Sub
Sub getstr()
response.write(Request.Cookies("WL_DuiBi"))
End Sub
%>
=======================
所有功能实现都没有问题,就是只回调一次,即使不用COOKICES,换成返回随机数或数据库内容也只回调一次,
还试过一个 xmlHttpWL01.abort(); 的也不行, 缓存也清了,url也加了随即参数,但还是不行,请教?
[解决办法]
其实你可以写成
function cXML(){ var objXML=null,xmlStr if(window.ActiveXObject){ var xmlStr=new Array( "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"); for(var i=0;i<xmlStr.length;i++){ try{ var objXML=new ActiveXObject(xmlStr[i]); return objXML; }catch(e){} } } else if(window.XMLHttpRequest){ var objXML=new window.XMLHttpRequest() return objXML; }}function add(){ url = "Test_duibi.asp?action=setstr&pname="+document.getElementsByName("pname")[0].value; xmlHttpWL=cXML() xmlHttpWL.open("GET",url); xmlHttpWL.onreadystatechange = setTable; xmlHttpWL.send(null); } function get(){ url = "Test_duibi.asp"; xmlHttpWL=cXML() xmlHttpWL01.open("GET",url); xmlHttpWL01.onreadystatechange = setTable; xmlHttpWL01.send(null); } function setTable(){ if(xmlHttpWL01.readyState != 4)return false; if(xmlHttpWL01.status != 200)return false; var ss = xmlHttpWL01.responseText; alert(ss); }
[解决办法]
我不知道你是否认真看了我给你的代码没?如果你认真看了话,你就会发现了,你说的问题也没有问题
看到你的回复,我就测试了自己的代码,按你的要求,运行成功的(当然有点粗心,有一个地方写错文字)
现在我看我测试过的后的代码发给你
<script> function cXML(){ var objXML=null,xmlStr if(window.ActiveXObject){ var xmlStr=new Array( "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"); for(var i=0;i<xmlStr.length;i++){ try{ var objXML=new ActiveXObject(xmlStr[i]); return objXML; }catch(e){} } } else if(window.XMLHttpRequest){ var objXML=new window.XMLHttpRequest() return objXML; }}function add(){ url = "Test_duibi.asp?action=setstr&pname="+document.getElementsByName("pname")[0].value; xmlHttpWL=cXML() xmlHttpWL.open("GET",url); //xmlHttpWL.onreadystatechange = setTable; //这里按说的不要了 xmlHttpWL.send(null); } function get(){ url = "Test_duibi.asp"; xmlHttpWL01=cXML() //太粗心,这里原来我写成xmlHttpWL=cXML(),现在改过来 xmlHttpWL01.open("GET",url); xmlHttpWL01.onreadystatechange = setTable; xmlHttpWL01.send(null); } function setTable(){ if(xmlHttpWL01.readyState != 4)return false; if(xmlHttpWL01.status != 200)return false; var ss = xmlHttpWL01.responseText; alert(ss); } </script> <INPUT TYPE="text" NAME="pname" > <INPUT TYPE="button" value="set" onclick="add();"> <INPUT TYPE="button" value="get" onclick="get();"> <% response.write("Cookies="&Request.Cookies("WL_DuiBi")) %> ================================ Test_duibi.asp ==================== <%@ LANGUAGE = VBScript codepage=65001%> <% response.charset="utf-8" Response.Buffer = True response.expires=0 Response.CacheControl="no-cache " Response.AddHeader "Pragma","no-cache" Select Case request("action") Case "setstr" : setstr() Case Else getstr() End Select Sub setstr() response.cookies("WL_DuiBi")=Trim(request("pname")) End Sub Sub getstr() response.write(Request.Cookies("WL_DuiBi")) End Sub %>
[解决办法]
至于下面这段很好理解,并不是创建很多对象,只创建一个
function cXML(){ var objXML=null,xmlStr if(window.ActiveXObject){ var xmlStr=new Array( "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"); for(var i=0;i<xmlStr.length;i++){ try{ var objXML=new ActiveXObject(xmlStr[i]); //上面这句创建对象,如果不能创建,说明不支持,出错跳入循环,事实并没有创建对象, //如果创建对象成功,那么下面的return句就返回对象,就是说跳出函数,当然也不执行后面循环,结果也只创建一个对象。 return objXML; }catch(e){} } } else if(window.XMLHttpRequest){ var objXML=new window.XMLHttpRequest() return objXML; }}
[解决办法]
不过对于你说的,你认为创建对象太多的问题,其实不存在的,只不过每次重新创建对象而已,并不占资源
你也可以把创建放在函数外面,是不影响程序运行的,如下面代码
xmlHttpWL=cXML() //改在这个地方function add(){ url = "Test_duibi.asp?action=setstr&pname="+document.getElementsByName("pname")[0].value; //xmlHttpWL=cXML() xmlHttpWL.open("GET",url); //xmlHttpWL.onreadystatechange = setTable; //这里按说的不要了 xmlHttpWL.send(null); } xmlHttpWL01=cXML()//改在这个地方function get(){ url = "Test_duibi.asp"; //xmlHttpWL01=cXML() //太粗心,这里原来我写成xmlHttpWL=cXML(),现在改过来 xmlHttpWL01.open("GET",url); xmlHttpWL01.onreadystatechange = setTable; xmlHttpWL01.send(null); }