我使用AJAX來檢查是否有與數據庫中的某條記錄,使用變量「壽」和「修改」搜索包含這些值的記錄(見下面的代碼)。AJAX的responseText有額外的數據
如果在數據庫中找到記錄,我將從php ajax代碼返回「found」到javascript;否則我返回「未找到」
我還將'zer'和'modify'的值存儲到SESSION中,然後再從php ajax代碼返回「找到」或「未找到」。
響應文本看起來像這樣當記錄在數據庫中找到:
array(2) {
["zer"]=>
string(2) "someVal"
["modify"]=>
string(1) "anotherVal"
}
found
我只希望「發現」這裏返回,由於某種原因,這個responseText返回了我建立會話變量在返回之前。
爲什麼會這樣?我怎樣才能精確地控制究竟是什麼是從Ajax調用返回的? 我嘗試使用一些緩衝區刷新PHP調用(請參閱代碼)不起作用。我已經閱讀了很多Ajax帖子,但是我找不到解釋如何從我的ajax返回的內容精確控制,確切控制,還是在我之前將我的'zer'和'modify'值存儲到SESSION中返回responseText是某種「no-no」。
這裏是代碼(注意:數據庫查找代碼工作100%,並且如果它存在,正確地查找記錄 - 下面的代碼已經爲「找到」和「未找到」情況進行了測試並正確定位該記錄是否存在)。
編輯:我使用一些輸出緩衝PHP調用,試圖控制可能發生的任何輸出緩衝,但這並沒有幫助。看到下面的這些緩衝區調用在handler.php
$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;
}
你爲什麼使用輸出緩衝? –
@php_nub_qq我使用一些輸出緩衝PHP調用來試圖控制可能發生的任何輸出緩衝,但這沒有幫助。 – CFHcoder
我認爲這些嘗試是造成您麻煩的原因,請嘗試刪除緩衝區並查看它是否有效。 –