javascript问题 - 包括php

时间:2008-12-16 11:50:50

标签: php javascript ajax

我有下面粘贴的代码,哪些服务器是小型ajax应用程序的核心。这之前工作正常,makewindows实际上显示了一个包含artcile_desc的结果的弹出窗口。我似乎在该函数之前有一个错误,因为现在只输出实际的PHP代码。这不是我的服务器设置的问题,因为我是管理员,并且没有改变。

我在Firebug中遇到以下错误,但我不确定它们是什么意思。

unterminated string literal
onclick(click clientX=52, clientY=50)1GmRZ%2F...D9g%3D%3D (line 2)
[Break on this error] child1.document.write("<br />\n
1GmRZ%2F...D9g%3D%3D (line 2)
updateByQuery is not defined
onclick(click clientX=29, clientY=17)CLQWYjW1...WlQ%3D%3D (line 2)
[Break on this error] updateByQuery("Layer3", "Ed Hardy");

var xmlHttp
var layername
var url
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);
}

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(); 
}

无论我尝试使用makewindows函数,只需输出php代码作为html源代码,而不是php代码的结果。这之前工作正常,我不确定我改变了什么导致了这种行为。

我现在粘贴了所有代码。调用updateByQuery的链接会生成错误,从而阻止正确解析makewindows ..我想。

编辑:当我使用这段代码时,php会被解析:

function makewindows(){
child1 = window.open ("about:blank");
child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
child1.document.close(); 
}

但不是上面的代码

php的结果是:

child1.document.write("<br />
58<b>Notice</b>: Undefined variable: row2 in <b>C:\Programme\EasyPHP 2.0b1\www\records4\fetchlayers.js</b> on line <b>57</b><br />
59null");

引发错误

4 个答案:

答案 0 :(得分:2)

我不知道Firebug抱怨什么,但我立即看到别的东西。

您无法从Javascript输出PHP代码并期望它运行。 Javascript在浏览器中执行,PHP代码应该在服务器上执行。基本上你给浏览器一个看起来像PHP代码的文本文件,但是浏览器不知道如何处理它。

如果要执行PHP代码,请将其放在Web服务器上的文件中。将浏览器窗口指向服务器上的该文件,输出将显示在窗口中。

答案 1 :(得分:1)

首先,每当你将任何东西编码为特定的符号时,你应该在这之前转换'特殊字符',以防万一它打破了符号。

child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");

应阅读:

child1.document.write("<?php echo json_encode(htmlspecialchars($row2['ARTICLE_DESC'], ENT_QUOTES)); ?>");

我仍然很困惑,但是为什么你甚至调用json_encode,文章desc应该是一个字符串因此:

child1.document.write("<?php echo htmlspecialchars($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");

就够了。

然而,这只会在页面加载时填充,我猜这是你的意图。 如果它不起作用,请查看源并确保它在源标记中。

答案 2 :(得分:0)

嗯,如果JavaScript显示PHP代码,这意味着服务器不再知道something.php必须运行PHP解释器。你应该仔细检查设置。并验证PHP没有损坏或其他什么。

此外,您显示的Firebug错误很奇怪,它显示垃圾。也许您已将服务器(或脚本?)设置为发送Gzip压缩数据?

答案 3 :(得分:0)

看起来PHP代码产生错误。 (实际上它甚至指向第57行的fetchlayers.js)也许你应该用try / catch块来包装它来处理错误,或者至少显示正在发生的错误?

另请查看FirePHP - 我没有太多使用它,但它似乎非常有用&amp;允许您将PHP脚本中的调试信息发送到Firebug的控制台窗口(这可以通过自定义http标头和Firefox扩展来完成)。