PHP-echoongjavascript函数

PHP-echoongjavascript函数,javascript,php,Javascript,Php,我看过其他关于回显JS代码的帖子,但它不适用于我的JS代码。我不知道这是否是因为我也在响应AJAX调用,但我不明白PHP为什么会对此大惊小怪 在将这些JS调用转换为等价的PHP调用时,我做错了什么 JavaScript代码: <script language="Javascript"> var countdown; var i=0; countdown = setInterval(function(){ var xmlhttp;

我看过其他关于回显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>
    <?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>";
    ?>
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 echo '<script language="text/javascript"> someFunction("GET","updateindex.php"); </script>' ?>

var倒计时;
var i=0;
倒计时=设置间隔(函数(){
var-xmlhttp;
if(window.XMLHttpRequest){
//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}否则{
//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById(“homelink”).innerHTML=i;
i++;
}
}
open(“GET”,“updateindex.php”,true);
xmlhttp.send();
},3000);
PHP echo用于上面的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>
    <?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>";
    ?>
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 echo '<script language="text/javascript"> someFunction("GET","updateindex.php"); </script>' ?>

首先,尝试以这种方式回显:

<?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>';
?>

检查你的页面来源,如果它真的没有回音


我只想补充一点,这是一种非常糟糕的做法,但我们只是想弄清楚为什么它不起作用,而不是如何以最佳方式来做…

首先,尝试以这种方式回应它:

<?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>';
?>

检查你的页面来源,如果它真的没有回音


我只想补充一点,这是一种非常糟糕的做法,但我们只是想弄清楚它为什么不起作用,而不是如何以最佳方式进行…

尝试关闭并重新打开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
?>
var倒计时;
var i=0;
倒计时=设置间隔(函数(){
var-xmlhttp;
if(window.XMLHttpRequest){
//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}否则{
//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById(“homelink”).innerHTML=i;
i++;
}
}
open(“GET”,“updateindex.php”,true);
xmlhttp.send();
},3000);

尝试关闭并重新打开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
?>
var倒计时;
var i=0;
倒计时=设置间隔(函数(){
var-xmlhttp;
if(window.XMLHttpRequest){
//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}否则{
//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var JSONobj=JSON.parse(xmlhttp.responseText);
document.getElementById(“homelink”).innerHTML=i;
i++;
}
}
open(“GET”,“updateindex.php”,true);
xmlhttp.send();
},3000);

您没有回显换行符(
\n
)字符,因此整个输出是一行文本

为了实现这一点,您需要在JS语法中完美地使用分号、花括号等。此外,在这一行输出中使用单行注释(
/
)。一旦解析器命中了第一个,该行的其余部分(即代码的其余部分)就是一条注释。最好使用多行注释符号(
/*comment*/

您需要将换行符添加到每个回显行的末尾,或者使用一个或类似的长格式字符串

尽管如此,像这样重复JS是非常糟糕的做法。你应该停止那样做。关闭PHP并在需要时重新打开它是一个好的开始。将大部分JS移到外部JS文件会更好。如果您需要PHP将数据输出到JS,有许多其他方法可以实现


从注释中添加:您还有一个额外的
echo“}”行就在
echo”xmlhttp.open
行之前。这种情况在尝试从一个lang回显另一个lang时很常见,所以这是我建议您停止的原因之一

另外,在您检查
onreadystatechange
时,在您尝试解析响应之前,您没有检查请求是否已完成且是否成功


可能还有其他错误,但这就是我目前的情况。

您没有回显换行符(
\n
)字符,因此整个输出是一行文本

为了实现这一点,您需要在JS语法中完美地使用分号、大括号等。此外,您在这一行输出中使用单行注释(
/
)。一旦解析器命中第一行注释,则该行的其余部分(即您代码的其余部分)将被删除是注释。最好使用多行注释符号(
/*comment*/

您需要将换行符添加到每个回显行的末尾,或者使用一个或类似的长格式字符串

总而言之,像这样回显JS是非常糟糕的做法。你应该停止这样做。关闭PHP并在需要时重新打开它是一个好的开始。将大部分JS移到外部JS文件会更好。如果你需要PHP将数据输出到JS,有许多其他方法可以实现


从注释中添加:您的
echo“}”
行就在
echo”xmlhttp前面。打开
行。这类事情在尝试从一个语言到另一个语言时很常见,所以这是我说你应该停止的原因之一

另外,在您检查
onreadystatechange
时,在您尝试解析响应之前,您没有检查请求是否已完成且是否成功

可能还有其他的问题,但这就是我目前所做的