我看过其他关于回显 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 代码尝试根本没有任何作用。
最佳答案
您没有回显换行符 (\n
) 字符,因此整个输出是一行文本。
为了使其工作,您需要完美地使用分号、大括号等的 JS 语法。此外,您在以下位置使用单行注释 (//
)这一结果行的输出。一旦解析器命中其中的第一个,该行的其余部分(即代码的其余部分)就是注释。首选多行注释符号 (/* comment */
)。
您需要在每个回显行的末尾添加换行符或使用 heredoc或类似的长格式字符串。
总而言之,像这样回显 JS 确实是不好的做法。你应该停止这样做。关闭 PHP 并在需要时重新打开它是一个好的开始。将大部分 JS 移至外部 JS 文件会更好。如果需要PHP输出数据到JS,还有很多其他的方法可以实现。
评论添加:在 echo "xmlhttp.open
行之前还有一个额外的 echo "}";
行。当尝试从一种语言回显另一种语言时,这种事情很常见,所以这是我说你应该停止的原因之一。
此外,在检查 onreadystatechange
时,在尝试解析响应之前,您不会检查请求是否已完成且是否成功。
可能还有其他问题,但这就是我到目前为止所遇到的。
关于javascript - PHP - 回显 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306835/