Javascript AJAX函数无法加载

时间:2008-12-08 11:25:08

标签: php javascript ajax

我有一个realtivley简单的ajax应用程序,我已经分解为更加模块化。代码位于下面的链接中,我主要做的是添加GetRecordSet函数并允许fetchcompelte获取一个变量,用于将数据放入哪个层。它应该可以正常工作。当我输入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

2 个答案:

答案 0 :(得分:0)

我建议您使用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

并检查。

答案 1 :(得分:0)

首先,我会同意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)
}

layer被定义为GetAuctionData()中的局部变量,但可以在匿名函数中访问,因为您正在创建一个Closure。请注意,我没有测试过上述功能,但它原则上应该有用。