2009-07-06 4 views
0

私は検索ボックスと結果ボックスを持つ簡単な検索フォームを持っています。xmlhttprequestのみステータス3になります

私は検索ワードを入力すると、要求が同じように作成された:PHPスクリプトでhttp://www.site.com/php_handler.php?s=hello と結果が戻ってスクリプトに、このように与えられる:

<?php return $s; ?> 

問題は私のhtmlrequestはreadyStateので停止していることです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で何が起こっているのかを見ることができます>のCache-Controlを送信しないでください:ポストチェック= 0、事前に確認してください= 0。これらは、あなたが思うようなことをするものではなく、まったく必要ありません。

2> AJAXの結果ページでContent-LengthまたはConnection:Closeヘッダーを送信する必要があります。

3>リクエストURLにランダムを追加して、古いキャッシュエントリが見つからないようにしてください。

0

あなたのPHPページで出力を終了しています...あなたは

ob_start(); 

を使用している場合たとえば、あなたはまた、このような

ob_end_flush(); 
+0

私は開始ポストにPHPを掲載します。 1秒待つ。 – sanders

+0

投稿していただきありがとうございます - あなたのAJAXリクエストで使用されたURLを作成し、ブラウザに直接投稿して出力を表示してください。私の提案は、$ sを返すのではなく、$ sをエコーすることです。 – Fenton

0

readyStateの...として、出力をフラッシュしています3 =>一部のデータを受信しました

ReadyState 4 =>すべてのデータを受信しました

おそらくXMLHTTPRequestオブジェクトはまだいくつかのデータを待っています。

あなたのPHPスクリプトが正しく終了していますか?

コンテンツの長さは問題ありませんか?

+0

私はDB内で直接クエリを実行しますが、検索用語には4つのレコードがあります;-)。 ajaxリクエストでPHPコードをデバッグするにはどうすればよいですか? – sanders

0

これをデバッグするには2つの方法があります。[GETを使用しているため]ブラウザに直接URLを入力し、何が起こっているかを確認してください。

OR

あなたは、このようなFiddlerなどのツールを使用して、正確にはXMLHttpRequest

関連する問題