ajax responsetext有额外的数据

时间:2014-01-08 23:30:34

标签: javascript php ajax

我使用ajax检查数据库中是否有某条记录,使用变量' zer' '修改' 搜索包含这些值的记录(参见下面的代码)。

如果在数据库中找到记录,我会返回"找到"从php ajax代码到javascript;否则我会回来"找不到"

我还存储了' zer'和“修改'在我返回"发现"之前进入会话或者"未找到" 来自php ajax代码。

当在数据库中找到记录时,响应文本如下所示:

        array(2) {
            ["zer"]=>
              string(2) "someVal"
            ["modify"]=>
              string(1) "anotherVal"
                 }
        found

我只想要"找到"返回此处,由于某种原因,responseText返回我在返回之前设置的Session变量。

为什么会这样,我如何精确控制完全从Ajax调用返回的内容? 我尝试使用一些缓冲区刷新php调用(参见代码)无效。我已经阅读了很多Ajax帖子,但我找不到一个解释如何对我的ajax返回的内容进行精确,准确控制,或者是否存储我的' zer&# 39;和“修改'在返回responseText之前进入SESSION的值是某种" no-no。"

以下是代码(注意:数据库查找代码100%正常工作,并且如果存在则正确查找记录 - 下面的代码已针对“找到的”和“'”进行了测试。找不到'情况并正确找到记录(如果有)。

编辑:我使用一些输出缓冲PHP调用来试图控制可能发生的任何输出缓冲,但这没有帮助。请参阅下面的这些缓冲区调用。

JAVASCRIPT

 var zer = "someVal";
 var modify = "anotherVal";

 if(window.XMLHttpRequest)
 {
    xmlhttp = new XMLHttpRequest();
 }
 else
 {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }

 var theResponseText; 

 xmlhttp.onreadystatechange = function()
 {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        theResponseText = xmlhttp.responseText;
        alert("responseText is >>>" + theResponseText + "<<< that.");

        if( theResponseText == 'notfound')
        {
            return;
        }
        else if( theResponseText == 'found')
        {
            alert("We found the record!.")
        }
    }
 }

 ajaxText = "handler.php?zer=" + zer + "&modify=" + modify;
 xmlhttp.open("GET", ajaxText, true);
 xmlhttp.send(); 

handler.php中的PHP CODE

 $zer = $_GET['zer'];
 $modify = $_GET['modify'];

 $theDB = connectToDb();  

 $query = "SELECT * FROM " . Dbases::$MyDB_TABLE 
        . " WHERE BINARY " . dbConstants::$ZERS 
        . " IN ('" . $zer . "')"
        . " AND BINARY " . dbConstants::$MODIFYS
        . " IN ('" . $modify . "')";

 $result = mysql_query($query);


 if($result)
 {
       $numrows = mysql_num_rows($result);
       if($numrows > 0)
       {
           $bFound = true;
       }
 }
 closeDB($theDB);

// now erase the php output buffering, start a new output buffer,
// echo the result, then flush the php output buffer so that the
// Ajax response text has *exactly* what I 'echo' here and nothing else.
// NOTE: this did *not* help.

if(! $bFound)
{
   ob_flush();
   while (@ob_end_flush()); 
   //ob_end_flush();
   //ob_end_clean();
   //ob_end_flush();       
   ob_start();

   //echo "notfound";
   print "notfound";

   ob_end_flush();
   //ob_end_clean();

   // clear out the session vars
   $_SESSION['zer'] = "";
   $_SESSION['modify'] = "";
   return;
}   
else 
{
    ob_end_clean();
    ob_start();  

    //echo "found";
    print "found";

    ob_end_flush();
    //ob_end_clean();

    $_SESSION['zer'] = $zer;
    $_SESSION['modify'] = $modify;
    return;
}

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。其中一个团队成员,在某些时候,在源文件中停留了一个var_dump,我直到现在才抓住它。我注释掉var_dump()和voila,responseText是预期的,我也消除了所有的php缓冲区函数调用。