读书人

简单的不能再简单的AJAX原型调了1天了

发布时间: 2012-03-26 15:46:56 作者: rapoo

简单的不能再简单的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也加了随即参数,但还是不行,请教?

[解决办法]
其实你可以写成

JScript code
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); } 


[解决办法]
我不知道你是否认真看了我给你的代码没?如果你认真看了话,你就会发现了,你说的问题也没有问题

看到你的回复,我就测试了自己的代码,按你的要求,运行成功的(当然有点粗心,有一个地方写错文字)

现在我看我测试过的后的代码发给你

HTML code
<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 %>
[解决办法]
至于下面这段很好理解,并不是创建很多对象,只创建一个

JScript code
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;    }}
[解决办法]
不过对于你说的,你认为创建对象太多的问题,其实不存在的,只不过每次重新创建对象而已,并不占资源
你也可以把创建放在函数外面,是不影响程序运行的,如下面代码

JScript code
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); } 

读书人网 >ASP

热点推荐