我在thePhpFile.php文件中有以下代码来处理Ajax调用:
<?php
require_once('usefulStuff.php'); // stuff used throughout the code
if (isset($_GET['zer']))
{
$bFound = false;
if(! $bFound)
{
echo "notfound";
return;
}
else
{
echo "found";
return;
}
}
?>
这是处理responseText的内联onreadystate函数(javascript):
var theResponseText = "rText";
var zer = "testing";
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
theResponseText = xmlhttp.responseText;
alert("responseText is >>>" + theResponseText + "<<< that.");
if( theResponseText == 'notfound')
{
alert("sorry, nothing found.")
}
}
}
var ajaxText = "thePhpFile.php?zer=" + zer;
xmlhttp.open("GET", ajaxText, false);
xmlhttp.send();
如果我添加,比如换行或其他任何东西,实际上,在我的有用的Build.php包含文件中 - 我将它添加到有用的东西.php的底部, 后面的? &gt; 结束标记 - 上面的以下代码行,一个echo语句,用于定位和获取这些额外的换行符等,并在我的responseText中返回它们:
echo "notfound";
编写了编译器并处理了BNF语法之后,我不明白为什么php中的echo语句被设置为'echo',而不是紧跟在'echo'之后的第一个分号'''。在解析过程中遇到的问题。
我知道我可以使用trim()来撤消空格,但我的问题是,我想强迫我上面的echo语句以上面的echo语法表明应行为的方式行事。如果有充分的理由为什么上面的echo语句在我的include文件中查找无关的空格以返回我的“notfound”文本,我不知道会是什么原因,但我想禁用那个意外的行为
我希望我的代码行 echo“notfound”; 来做到这一点,仅此而已 - 只需回显 notfound 这个词,并在此时停止回显在“未发现”文本后立即遇到分号。
如何限制 echo 行为仅回显 echo 后面的内容,并在达到分号时停止回显?
顺便说一下,在尝试我的有用的Build.php文件内容超出?&gt; 终止标记时,我在该文件的末尾添加了这个内容:
// now ending the php code in usefuleStuff.php:
?>
<noscript>
<meta http-equiv="refresh" content="0;
URL=http://mywebsite.com/noscript.html"/>
</noscript>
代码行 echo“notfound”; - 当我检索我的responseText时 - 响应文本还包含所有三行 noscript 代码行,以及任何额外代码空白,除了我的“未发现”。
因此,php中的'echo'是垃圾收集,无论我放在包含的有用的Build.php文件的末尾。
如何限制echo的行为来执行代码行 echo“notfound”; 会让你相信它会做什么,也就是说,只回显“notfound”这个词?
答案 0 :(得分:2)
我偶然发现了我的问题的解决方案,这是如何使语句 echo“notfound”; 在Ajax调用中完全按照语法似乎建议 - 我很欣赏'为什么'这个简单的代码行 echo“notfound”的解释:乍看之下没有提出建议。
以下是我如何强制 echo“notfound ; **的语法来执行它应该做的事情,即发送单词 notfound 作为我的responseText,没有别的 - 我偶然发现了一个高度外围相关的帖子,只提到了php函数'ob_end_clean()',我从那里拿了它。
这是我的修改后的代码,它返回一个严格控制的数据块作为我的Ajax responseText :
<?php
require_once('usefulStuff.php'); // stuff used throughout the code
if (isset($_GET['zer']))
{
$bFound = false;
if(! $bFound)
{
ob_end_clean();
ob_start();
echo "notfound";
ob_end_flush();
return;
}
else
{
echo "found";
return;
}
}
?>
为了验证这是否有效,我在有用的Build.php文件的最后,在结束?&gt; 标记之外放了十个换行符和以下代码:
// now ending the php code in usefulStuff.php:
?>
// ten newlines here....
<noscript>
<meta http-equiv="refresh" content="0;
URL=http://mywebsite.com/noscript.html"/>
</noscript>
现在,无论我的有用的Just.uffp包含文件中的关闭?&gt; php标记之外是否有任何代码或空格 - 我的Ajax onreadystatechange函数中的responseText包含了我期望的内容是,“未发现”,没有别的。
自从我在20世纪80年代和90年代初的C编程日以来,我没有使用输出缓冲功能。这是我第一次使用php的输出缓冲函数,但它确实让我能够精确控制我的responseText在Ajax调用中的样子。