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

时间:2011-01-27 15:13:13

标签: php ajax

我是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)时,它表明它一遍又一遍地接收相同的字符串。我甚至在一个点添加了一个时间戳,所有打印的表都是相同的。

为什么会发生这种情况?

1 个答案:

答案 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逻辑就会出现问题,你没有发布。

相关问题