2009-07-06 67 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