我使用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;
}
答案 0 :(得分:0)
我解决了这个问题。其中一个团队成员,在某些时候,在源文件中停留了一个var_dump,我直到现在才抓住它。我注释掉var_dump()和voila,responseText是预期的,我也消除了所有的php缓冲区函数调用。