PHP - 回应Javascript函数

时间:2013-11-30 23:23:08

标签: javascript php

我已经看过有关回应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代码尝试什么也没做。

5 个答案:

答案 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>';