我有一个简单的ajax应用程序,我把它拆分成更模块化的应用程序。代码在下面的链接中,我主要做的是添加GetRecordSet函数,并允许fetchcompelte接受将数据放入哪个层的变量。它在thery中应该工作得很好。当我将alert()放入时,代码似乎可以执行了,除了fetchcomplete中的if子句之外。
http://www.nomorepasting.com/getpaste.php?pasteid=22558
这是get_records.php的代码,同样看起来应该没问题
http://www.nomorepasting.com/getpaste.php?pasteid=22559
这是原始的索引php文件
http://www.nomorepasting.com/getpaste.php?pasteid=22560
发布于 2008-12-08 12:13:10
首先,我同意Shyam的观点,并为Firefox安装Firebug;这将对javascript调试有很大帮助。
不管怎么说,这句话
xmlHttp.onreadystatechange = FetchComplete(layername);将把FetchComplete(layername)的结果赋值给xmlHttp.onreadystatechange,这不是您想要的结果。它需要是
xmlHttp.onreadystatechange = FetchComplete;但是你还有传递layername的问题。
如果您将onreadystatechange定义为匿名内部函数,则可以轻松地使用在其外部定义的变量,因此可以执行以下操作:
function GetAuctionData(pk) {
var xmlHttp=GetXmlHttpObject();
var layer = "Layer2";
if(xmlHttp==null) {
alert("Your browser is not supported?");
}
var url="get_auction.php?";
url=url+"cmd=GetAuctionData&pk="+pk;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
document.getElementById(layer).innerHTML=xmlHttp.responseText
} else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
document.getElementById(layer).innerHTML="loading"
}
};
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}在GetAuctionData()中,layer被定义为一个局部变量,但是在匿名函数中是可以访问的,因为您正在创建一个闭包。请注意,我还没有测试过上面的函数,但原则上它应该可以工作。
发布于 2008-12-08 11:41:25
我建议您使用http://www.prototypejs.org中的prototypejs,它将抽象代码中的所有状态检查,使其更简单,并摆脱混乱。
如果出于某些原因,您更喜欢使用自己的代码,则应避免对XMLHttpRequestObject的readyState属性使用字符串值。请改用下表
State Description
0 The request is not initialized
1 The request has been set up
2 The request has been sent
3 The request is in process
4 The request is complete检查一下。
https://stackoverflow.com/questions/349238
复制相似问题