2009-07-06 45 views
0

我有一個簡單的搜索框與搜索框和結果框。xmlhttprequest只能得到狀態3

當我鍵入搜索詞的請求被創建,如:http://www.site.com/php_handler.php?s=hello 在PHP腳本和結果返還給腳本是這樣的:我htmlrequest停在readyState的

<?php return $s; ?> 

的問題是3它不會到4

的JavaScript看起來像這樣:

var xmlhttp = sajax_init_object(); 

function sajax_init_object() { 
     var A; 
     try { 
      A=new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       A=new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (oc) { 
       A=null; 
      } 
     } 
     if(!A && typeof XMLHttpRequest != "undefined") 
      A = new XMLHttpRequest(); 
     if (!A) 
      sajax_debug("Could not create connection object."); 
     return A; 
    } 
function getSearchItem() 
    { 
     gs=document.forms.mainform.resultsfield; 
     var searchword=document.forms.mainform.searchform.value; 
     if (searchword.length>=3) 
     { 
     setWaitCursor(); 
     clearResults(); 
     var uri = "http://site.com/ajax_handler.php?s="+searchword; 
     console.log(uri); 
     xmlhttp.open("GET", uri, true); 
     xmlhttp.onreadystatechange=function() 
     { 

     if (xmlhttp.readyState==4) { 
      processResults(xmlhttp.responseText); 
       removeWaitCursor(); 
     }else{ 
      console.log(xmlhttp.readyState); 
     } 
     } 
     xmlhttp.send(null); 
    } 
    else 
    { 
     alert("please add at least 3 characters ."); 
    }  
    } 

有人能告訴我爲什麼STO ps在3?

編輯:這裏也是PHP代碼:

<?php 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

session_start(); 


//include main file 
require_once($_SESSION["FILEROOT"] . "xsite/init.php"); 

//check if formulier is posted 

$zoekterm = C_GPC::getGETVar("s"); 
$s=""; 

if ($zoekterm != "") { 
    $query="SELECT number,name,city,zib,zip_annex FROM articles WHERE version='edit' AND (naam LIKE '%$school%' OR brinnummer='$school') ORDER BY name"; 
    if ($rs=C_DB::fetchRecordSet($query)) { 
     while ($row=C_DB::fetchRow($rs)) { 
      if ($row["plaats"]!="") { 
       $s.=$row["name"].", ".$row["city"]."|".$row["number"]."\n"; 
      } else { 
       $s.=$row["name"].", ".$row["zip"].$row["zip_annex"]."|".$row["number"]."\n"; 
      } 
     } 
    } 
} 

return $s; 


?> 

編輯:

我錯過了我的PHP腳本中的分號,現在準備狀態只到達2

編輯:

問題甚至不同。它達到4,但不顯示結果文本。

回答

0

1>不要發送緩存控制發生:後檢查= 0,前檢查= 0。這些不會做你認爲他們做的事,他們完全沒有必要。

2>您的AJAX結果頁面需要發送內容長度或連接:關閉標題。

3>嘗試在請求URL中添加一個隨機數,以確保您沒有查看陳舊的緩存條目。

0

你結束你的PHP頁面...例如在輸出,如果你使用

ob_start(); 

你是不是也刷新輸出,如...

ob_end_flush(); 
+0

沒有。我將在發佈帖子中發佈php。等一秒鐘。 – sanders 2009-07-06 13:40:49

+0

感謝張貼 - 創建您的AJAX請求所使用的URL,並將其直接發佈到瀏覽器中以查看輸出。我的直接建議是回顯$ s而不是返回$ s。 – Fenton 2009-07-07 06:59:45

0

的readyState 3 =>有些數據已收到

ReadyState 4 =>所有數據已收到

也許XMLHTTPRequest對象仍在等待某些數據。

你確定你的PHP腳本正確結束?

內容長度是否正常?

0

要調試此選項,您有兩個選項,直接在瀏覽器中鍵入URL [因爲您使用GET]並查看發生了什麼。

OR

可以使用這樣的工具,Fiddler,看看究竟是用了XMLHttpRequest