2014-01-08 81 views
0

我使用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; 
} 
+0

你爲什麼使用輸出緩衝? –

+0

@php_nub_qq我使用一些輸出緩衝PHP調用來試圖控制可能發生的任何輸出緩衝,但這沒有幫助。 – CFHcoder

+0

我認爲這些嘗試是造成您麻煩的原因,請嘗試刪除緩衝區並查看它是否有效。 –

回答

0

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(); 

PHP代碼我解決了這個。其中一位團隊成員在某些時候在源文件中使用了var_dump方式,直到現在我才注意到它。我註釋了var_dump()和voila,responseText和預期的一樣,並且我也消除了所有的php緩衝區函數調用。