AJAX问题:多个不同的请求返回相同的响应

问题描述:

我是AJAX新手,尝试使用它来加速显示PHP全文搜索的结果。我有大约1700个文件需要搜索,所以不用等待服务器处理所有我想发送的第100个脚本并显示结果,然后再显示下一个100等,这样用户就可以立即获得满足感。AJAX问题:多个不同的请求返回相同的响应

为此,我调用函数callftsearch,其中包含字符串中所有文件的名称以及另一侧的PHP函数运行搜索所需的一些其他信息。 callftsearch创建每个100个文件的数组,将它们加入到字符串中,并通过javascript函数ftsearch将其发送到ftsearch.php。 PHP运行搜索并格式化结果以供显示,并将HTML字符串与表格返回。 addresults()只是将该表追加到页面上的现有div上。

这里的JavaScript:

function GetXmlHttpObject() 
{ 
var xmlHttp=null; 
try { xmlHttp=new XMLHttpRequest(); } 
catch (e) { try { xmlHttp=new ActiveXObject('Msxml2.XMLHTTP'); } 
catch (e) { xmlHttp=new ActiveXObject('Microsoft.XMLHTTP'); } } 
return xmlHttp; 
} 

function callftsearch(allfiles, count, phpfilenames, keywordscore, keywordsboolean, ascii) { 
var split_files = allfiles.split("|"); 
var current_files = new Array(); 
var i; 
for (i = 1; i<=count; i++) { 
file = split_files.shift(); 
current_files.push(file); 
     if (i%100 == 0 || i == count) { 
      file_batch = current_files.join('|'); 
      ftsearch(file_batch, phpfilenames, keywordscore, keywordsboolean, ascii);  
      current_files.length = 0; 
      } 
     } 
} 

function ftsearch(file_batch, phpfilenames, keywordscore, keywordsboolean, ascii) 
{ 
xmlHttp=GetXmlHttpObject(); 
if (xmlHttp==null) { return; } 

// If our 'socket' has changed, send the response to addresults() 
xmlHttp.onreadystatechange=addresults; 
xmlHttp.open('POST','ftsearch.php', true); 
var content_type = 'application/x-www-form-urlencoded'; 
xmlHttp.setRequestHeader('Content-Type', content_type); 
xmlHttp.send('f='+file_batch+'&pfn='+phpfilenames+'&kw='+keywordscore+'&kwb='+keywordsboolean+'&a='+ascii); 
} 

function addresults() 
{ 
var displayarray = new Array(); 
if (xmlHttp.readyState==4) 
{ 
    var ftsearchresults = xmlHttp.responseText; 
    $('#result_tables').append(ftsearchresults); 
} 
} 

的问题:页面显示完全相同的表反复,只有前几个结果。当我添加alert(file_batch)到callftsearch它表明它正在连续发送正确的文件包。但是,当我在分析结果()中提醒(ftsearchresults)时,它显示它一遍又一遍地接收相同的字符串。我甚至在一点上添加了一个时间戳,而且所有打印的表格都是一样的。

为什么会发生这种情况?

+0

如果您不得不搜索1700个文件内容,您应该考虑索引文件内容 – 2011-01-27 15:42:13

这里有几件事。

第一:它看起来像您已经使用jQuery,因为你也行,

$( '#result_tables')

如果thsts的话,那么为什么不使用jQuerys内置ajax功能?你可能只是做这样的事情,

$.ajax({ 
    type: "POST", 
    url: "ftsearch.php", 
    data: 'f='+file_batch+'&pfn='+phpfilenames+'&kw='+keywordscore+'&kwb='+keywordsboolean+'&a='+ascii, 
    success: function(response){ 
     $('#result_tables').append(response); 
    } 
}); 

二:如果输出仍然是相同的前几个项目每一次,你有没有试过输出的AJAX页面接收信息?如果它正在接收正确的信息,那么你的PHP逻辑有问题,你没有发布。