首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

简单的不能再简单的AJAX原型调了1天了,还是只执行一次回调,请帮忙解决!该怎么处理

2012-03-26 
简单的不能再简单的AJAX原型调了1天了,还是只执行一次回调,请帮忙解决!test.aspscriptvarxmlHttpWLfals

简单的不能再简单的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); } 

热点排行