我已经看过有关回应JS代码的其他帖子,但它不适用于我的JS代码。我不知道它是否因为我也在回应AJAX调用,但我不明白为什么PHP会对此大惊小怪。
在回应将这些JS调用转换为等效的PHP调用时,我做错了什么?
JavaScript代码:
<script language="Javascript">
var countdown;
var i=0;
countdown = setInterval(function(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById("homelink").innerHTML=i;
i++;
}
}
xmlhttp.open("GET","updateindex.php",true);
xmlhttp.send();
},3000);
</script>
以上JavaScript代码的PHP回显(我需要的,但不起作用):
<?php
echo "<script language='Javascript'>";
echo "var countdown;";
echo "var i=0;";
echo "countdown = setInterval(function(){";
echo "var xmlhttp;";
echo "if (window.XMLHttpRequest){";
echo "// code for IE7+, Firefox, Chrome, Opera, Safari";
echo "xmlhttp=new XMLHttpRequest();";
echo "}else{";
echo "// code for IE6, IE5";
echo "xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');";
echo "}";
echo "xmlhttp.onreadystatechange=function(){";
echo "var JSONobj=JSON.parse(xmlhttp.responseText);";
echo "document.getElementById('homelink').innerHTML=i;";
echo "i++;";
echo "}";
echo "}";
echo "xmlhttp.open('GET','updateindex.php',true);";
echo "xmlhttp.send();";
echo "},3000);";
echo "</script>";
?>
我上面的PHP代码尝试什么也没做。
答案 0 :(得分:3)
您没有回显换行符(\n
),因此整个输出是一行文字。
为了使它能够工作,你需要在JS语法中使用分号,花括号等等。此外,你在这一行中使用单行注释(//
)输出一旦第一个被解析器命中,该行的其余部分(代码的其余部分)就是注释。多行注释表示法(/* comment */
)将是首选。
您需要在每个echo'd行的末尾添加换行符或使用heredoc或类似的长形式字符串。
所有这一切,像这样回应JS是非常糟糕的做法。你应该停止这样做。关闭PHP并在需要时重新打开它是一个良好的开端。将大量JS转移到外部JS文件更好。如果您需要PHP将数据输出到JS,还有许多其他方法可以实现它。
添加评论:您的echo "}";
行之前还有一条额外的echo "xmlhttp.open
行。当试图从另一个人那里回复一个lang时,这种情况很常见,所以这就是我说你应该停止的原因之一。
另外,在您检查onreadystatechange
时,在尝试解析响应之前,您没有检查请求是否已完成且成功。
也可能有其他问题,但这就是我到目前为止所做的事情。
答案 1 :(得分:1)
尝试关闭并重新打开PHP标记:
?>
<script language="Javascript">
var countdown;
var i=0;
countdown = setInterval(function(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById("homelink").innerHTML=i;
i++;
}
}
xmlhttp.open("GET","updateindex.php",true);
xmlhttp.send();
},3000);
</script>
<?php
这也为您提供了更简单的IDE /编辑器中突出显示的代码的奢侈。
答案 2 :(得分:0)
首先,尝试以这种方式回应:
<?php
echo '<script language="text/javascript">
var countdown;
var i=0;
countdown = setInterval(function(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById("homelink").innerHTML=i;
i++;
}
}
xmlhttp.open("GET","updateindex.php",true);
xmlhttp.send();
},3000);
</script>';
?>
检查您的网页来源是否真的没有回应。
我只想补充一点,这是非常糟糕的做法,但我们只是想弄清楚它为什么不起作用,而不是如何以最好的方式去做...
答案 3 :(得分:0)
只需回显函数名称,就可以让自己更轻松。然后,您可以在其他地方重用代码。它看起来像这样:
Javascript(可能在外部文件中):
function someFunction(methode,url){
var countdown;
var i=0;
countdown = setInterval(function(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById("homelink").innerHTML=i;
i++;
}
}
xmlhttp.open(methode,url,true);
xmlhttp.send();
},3000);
}
<强> PHP:强>
<?PHP echo '<script language="text/javascript"> someFunction("GET","updateindex.php"); </script>' ?>
<强>旁注强>
Chrome控制台和Firebug for Firefox是用于调试javascript的绝佳工具。
答案 4 :(得分:0)
您不仅要回显脚本,还必须调用脚本:
echo '<script>
(function(){
var countdown;
var i=0;
countdown = setInterval(function(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById("homelink").innerHTML=i;
i++;
}
}
xmlhttp.open("GET","updateindex.php",true);
xmlhttp.send();
},3000);
})();
</script>';
echo '<script>
(function(){
var countdown;
var i=0;
countdown = setInterval(function(){
var xmlhttp;
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById("homelink").innerHTML=i;
i++;
}
}
xmlhttp.open("GET","updateindex.php",true);
xmlhttp.send();
},3000);
})();
</script>';