javascript没有被调用

时间:2009-03-03 11:01:33

标签: php javascript ajax

我有以下javascript函数,当它们在一个独立文件中时,将从页面中正确调用。

function deleteItem(layer, url) {
    var xmlHttp=GetXmlHttpObject();
    if(xmlHttp==null) {
        alert("Your browser is not supported?");
    }
    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
            if(xmlHttp.responseText == 'result=true') {
                var row = document.getElementById(layer);
                row.parentNode.removeChild(row);
            }
            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);
}
function deleteRec(layer, pk) {
    url = "get_records.php?cmd=deleterec&pk="+pk+"&sid="+Math.random();
    if (confirm("Confirm Delete?")) {
        deleteItem(layer, url);
    }
}
function GetXmlHttpObject() {
    var xmlHttp=null;
    try {
        xmlHttp=new XMLHttpRequest();
    }
    catch (e) {
        try {
            xmlHttp =new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
        }
    }
    return xmlHttp;
}

它被称为:

 echo '<td><a href="#" onclick="deleteRec(\'article_' . $pk .'\', \'' . $pk . '\')">DELETE</a></td>' . "\n"; 

这将显示确认对话框,如果单击确定,将删除该页面。

然而

当我的其他必要功能放在js文件中时,什么都不会发生。

function update(layer, url) {
    var xmlHttp=GetXmlHttpObject();
    if(xmlHttp==null) {
        alert("Your browser is not supported?");
    }
    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);
}
function updateByPk(layer, pk) {
    url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random();
    update(layer, url);
}
function updateByQuery(layer, query) {
    url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random();
    update(layer, url);
}
function updateByPage(layer, query, pg) {
    url = "get_records.php?cmd=GetRecordSet&query="+query+"&pg="+pg+"&sid="+Math.random();
    update(layer, url);
}
function deleteItem(layer, url) {
    var xmlHttp=GetXmlHttpObject();
    if(xmlHttp==null) {
        alert("Your browser is not supported?");
    }
    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
            if(xmlHttp.responseText == 'result=true') {
                var row = document.getElementById(layer);
                row.parentNode.removeChild(row);
            }
            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);
}
function deleteRec(layer, pk) {
    url = "get_records.php?cmd=deleterec&pk="+pk+"&sid="+Math.random();
    if (confirm("Confirm Delete?")) {
        deleteItem(layer, url);
    }
}
function GetXmlHttpObject() {
    var xmlHttp=null;
    try {
        xmlHttp=new XMLHttpRequest();
    }
    catch (e) {
        try {
            xmlHttp =new ActiveXObject("Microsoft.XMLHTTP");

        }
        catch (e) {
        }
    }
    return xmlHttp;
}
function makewindows(html) {
    child1 = window.open ("about:blank");
    child1.document.write(html);
    child1.document.close();
}

JavaScript本身似乎没有任何问题,所以我想知道是否有某些东西被取消了。即使将deleterec()更改为简单警报也没有任何反应。

4 个答案:

答案 0 :(得分:1)

我想知道你的JS代码中是否有错误被检测到?如果你的Javascript中有语法错误,浏览器可能就不会运行任何一个。如果你使用像Firebug这样的调试器,这将帮助你追踪错误。

或者,尝试一次添加一个函数,这将告诉您哪一个正在破坏。

答案 1 :(得分:0)

尝试使用FireBug来遵循有效的代码 此外,如果您有一个完整的页面显示,可能会略微清楚。

答案 2 :(得分:0)

首先,在这个文本块中:

        if(xmlHttp.responseText == 'result=true') {
                // Here you remove the appropriate element from the DOM rather than trying to update something within the DOM
                var row = document.getElementById(layer);
                row.parentNode.removeChild(row);
        }
        document.getElementById(layer).innerHTML=xmlHttp.responseText;

您实际上并不想要这一行:

document.getElementById(layer).innerHTML=xmlHttp.responseText;

此外,尝试将deleteRec函数放在函数列表中的deleteItem函数之前。

我还建议您在Firefox中安装Firebug进行测试。这将显示页面上发生的任何Javascript错误。

答案 3 :(得分:-1)

或许你用来将js文件包含在你的页面中的html标签不正确

包含脚本的正确方法是

<script type="text/css" src="myfile.js"></script>

以下工作

<script type="text/css" src="myfile.js" />

我还建议您使用Firefox的错误控制台,这是一个很好的应用程序,可以让您知道是否有任何问题。