我是AJAX的新手,并尝试使用它来加快PHP全文搜索结果的显示速度。我有大约1700个文件要搜索,所以不要等待服务器处理我想要发送的所有内容,只需将前100个发送到脚本并显示结果,然后显示下一个等等,这样用户就可以获得即时满足感。
为此,我调用一个函数 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);
}
}
问题:页面重复显示完全相同的表,只有前几个结果。当我向 callftsearch 添加alert(file_batch)时,它表明它正在连续发送正确的文件包。但是当我在 addresults()中警告(ftsearchresults)时,它表明它一遍又一遍地接收相同的字符串。我甚至在一个点添加了一个时间戳,所有打印的表都是相同的。
为什么会发生这种情况?
答案 0 :(得分:1)
这里有一些事情。
首先:看起来你已经在使用jQuery,因为你有这条线,
$( '#result_tables')
如果是这样的话,为什么不使用内置ajax功能的jQuerys?你可以做这样的事情,
$.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逻辑就会出现问题,你没有发布。