Ajax responseText和echo破坏,返回头文件内容

时间:2013-08-09 05:08:58

标签: php javascript ajax echo

我在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”这个词?

1 个答案:

答案 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调用中的样子。