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)时,它显示它一遍又一遍地接收相同的字符串。我甚至在一点上添加了一个时间戳,而且所有打印的表格都是一样的。
为什么会发生这种情况?
答
这里有几件事。
第一:它看起来像您已经使用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逻辑有问题,你没有发布。
如果您不得不搜索1700个文件内容,您应该考虑索引文件内容 – 2011-01-27 15:42:13