我有以下javascript代码,加载时没有错误,但更新功能实际上看起来不起作用,因为从不加载get_Records.php。我无法测试get_auction.php是否在从get_records.php中加载时被加载
我主要担心的一个问题是我通过让update()接受参数pk和查询来做错事,因为只会使用其中一个。这似乎是一个糟糕的黑客和糟糕的逻辑,但我不知道一个更好的方法。
这是代码
var xmlHttp
var layername
var url
function update(layer, part, pk, query) {
alert ("update");
if (part=="1") {
alert ("part 1");
url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random()
} else if (part=="2") {
alert ("part 2");
url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random()
}
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 GetXmlHttpObject() {
var xmlHttp=null;
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
try {
xmlHttp =new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
return xmlHttp;
}
function makewindows() {
child1 = window.open ("about:blank");
child1.document.write(<?php echo htmlspecialchars(json_encode($row2["ARTICLE_DESC"]), ENT_QUOTES); ?>));
child1.document.close();
}
我将警报语句放入更新功能,而不显示一条,表示永远不会调用更新功能?
我不想,也不能使用框架,也不能使用firebug,所以请不要建议这些东西。我知道它们,并尽可能地使用它们。
我还想知道如果在makewindows()中调用php比让makewindows简单地使用参数更好...,每种方法都有优势或劣势吗?
我在尝试调用函数时似乎遇到错误,这就是我在PHP中执行的操作:
echo "<li><a href='#' onclick=update('Layer3','2','0','hello')'>Link 1</a></li>" .
这个html,哪个应该没问题?“\ n”;
<li><a href='#' onclick='update('Layer3','2','0','hello')'>Link 1</a></li>
编辑:我已经接受了tester101的建议并将其更改为:
echo '<li><a href="#" onclick="update(\'Layer3\',\'2\',\'0\',\'hello\')">Link 1</a></li>' . "\n";
仍然会出错。我可能最终会使用汤姆斯答案,但想知道为什么这不起作用。
答案 0 :(得分:2)
如果您可以使用Firefox并重现错误,我强烈建议您使用Firebug,因为它非常易于使用并逐步执行脚本,设置断点等。而不必使用“警报”语句可以使用像console.info("unexpected value x=%o", some_object);
这样的东西,它会将一个值记录到控制台(包括行#),您可以在以后检查它而无需中断脚本。
编辑:事实上,如果您在服务器上使用PHP,则可以使用FirePHP来帮助调试客户端。
答案 1 :(得分:0)
您是否确认PHP代码返回合理的内容? (我假设您可以查看HTML的源代码。)
使用好的'警报 - 调试:在代码中插入警告声明(例如windows.alert("GetXmlHttpObject started.");
)以确保您联系到它们。
JSLint可能会对您有所帮助。不过我试过了,并没有发现任何错误。
答案 2 :(得分:0)
如果您可以在Firefox中打开您的页面,我会检查错误控制台(c-s-J)。它帮助我找到了许多错别字。
此外,您的代码似乎缺少很多分号。也许其中一些是可选的但是......
答案 3 :(得分:0)
您可以将Url作为update()的参数,然后您不需要在其中构建网址,也不需要'可选'参数
修改(回复评论)
如果你有一个update()函数,只需要获取url和元素id(层)并根据AJAX调用的结果更新它,你可以这样做,以消除对可选参数和使用函数的需要做两件事。
function update(layer, url) {
var xmlHttp=GetXmlHttpObject(); //you have this defined elsewhere
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";
}
//etc
}
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);
}
然后根据你想做的事情打电话:
updateByPk('id_of_div', 2);
或
updateByQuery('id_of_div2', 'query');
e.g。用HTML格式
<a href="#" onclick="updateByQuery('Layer3', 'hello');">Link 1</a>
或在PHP中生成
<?php echo '<a href="#" onclick="updateByQuery(\'Layer3\', ' . json_encode($query) . ');">Link 1</a>';
答案 4 :(得分:0)
关于您的疑虑,据我所知,如果您不提供所有论据,JavaScript不会抱怨。
e.g
function myFunction(var1, var2, var3, var4){
调用此函数,如:
myFunction('test1','test2');
不会产生错误。
类似于在参数旁边放置默认值,默认情况下在javascript中为null或undefined。
您可以通过检查来测试:
if(null != var3){
可能会帮助你清理一下这个功能;你也可以从网上收集一个小的ajax类,它会稍微整理你的javascript。有很多包装函数封装了xmlHttpRequest对象,允许跨浏览器使用相同的结果。
如果您需要任何帮助,请与我们联系。我有信心,如果你发现一些预先构建的ajax方法(jQuery有一些很棒的功能!),那么你想要实现的任务就会容易得多。
答案 5 :(得分:0)
中的括号不匹配
child1.document.write(<?php echo htmlspecialchars(json_encode($row2["ARTICLE_DESC"]), ENT_QUOTES); ?>));
答案 6 :(得分:0)
onclick=update('Layer3','2','0','hello')'>Link 1
我不知道这是不是一个错字,但这行应该是
onclick="update('Layer3','2','0','hello')">Link 1
此代码将导致错误并且永远不会调用更新,因为onClick =之后的单引号终止于('。使用双引号。
onclick='update('Layer3','2','0','hello')'>Link 1
答案 7 :(得分:0)
可能有太多新行?
在大多数语言中,您可以使用换行符作为命令分隔符,或者使用“;”。在JavaScript中,您同时拥有:换行符有时作为“;”
请尝试使用此功能,看看是否有帮助:
function update(layer, part, pk, query) {
alert ("update");
if (part=="1") {
alert ("part 1");
url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random()
} else if (part=="2") {
alert ("part 2");
url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random()
}
// and so on...
}
唯一不同的是格式:开头卷曲与使用它的构造在同一行('if','else','function',...)。