我有下面粘贴的代码,哪些服务器是小型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");
引发错误
答案 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扩展来完成)。