Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Javascript AJAX函数未加载_Php_Javascript_Ajax - Fatal编程技术网

Php Javascript AJAX函数未加载

Php Javascript AJAX函数未加载,php,javascript,ajax,Php,Javascript,Ajax,我有一个realtivley简单的ajax应用程序,我将其分解为更模块化的应用程序。代码在下面的链接中,我主要做的是添加GetRecordSet函数,并允许fetchcompelte获取一个变量,用于将数据放入哪个层。它在理论上应该很好用。当我将警报放入时,代码似乎在执行,fetchcomplete中的任一if子句内部除外 这是get_records.php的代码,看起来应该也不错 这是原始的索引php文件 我建议您使用prototypejs from,它将抽象代码中的所有状态检查,使其更简单,

我有一个realtivley简单的ajax应用程序,我将其分解为更模块化的应用程序。代码在下面的链接中,我主要做的是添加GetRecordSet函数,并允许fetchcompelte获取一个变量,用于将数据放入哪个层。它在理论上应该很好用。当我将警报放入时,代码似乎在执行,fetchcomplete中的任一if子句内部除外

这是get_records.php的代码,看起来应该也不错

这是原始的索引php文件


我建议您使用prototypejs from,它将抽象代码中的所有状态检查,使其更简单,并消除混乱

如果出于某种原因,您更喜欢使用自己的代码,那么请避免为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

检查。

首先,我同意Shyam的观点,并为Firefox安装Firebug;这将对javascript调试有很大帮助

不管怎样,电话线

xmlHttp.onreadystatechange = FetchComplete(layername);
将FetchCompletelayername的结果分配给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中定义为局部变量,但在匿名函数中可以访问,因为您正在创建闭包。请注意,我没有测试上述函数,但原则上它应该可以工作。

嗨,Tom,这很好,我只是想知道是否有比为每个方法声明相同的内部函数更有效的方法?也许传递url和变量等是更好的方法?每个方法的内部函数肯定不同吗?另外,如果您使用类似prototype的东西,您可以在一行中完成全部工作,例如,new Ajax.Updaterlayer、url;我有GetAuctionData和GetRecordSet,它们基本相同,只是它们调用的php文件和传递的参数不同。它们目前都具有相同的内在功能。我知道框架,但现在我喜欢整理kins。然后你可以创建一个像updatelayer、url这样的函数,并使用该函数两次。