2012-06-01 53 views
1

第一我的代码jQuery用户界面自动完成IE问题

$(function() { 
     var suggest; 
     $("#guestname").keyup(function() { 

      $.ajax({ 
       async: true, 
       url: '../include/searchGuest.php', 
       dataType: 'json', 
       data: 'searchTxt=' + $(this).val() + '&festival_id=<?php echo $festival_id;?>', 
       success: function(data) { 
        suggest = data; 
        get_autocomplete(suggest); 
       } 
      }); 
     }); 
    }); 


    function get_autocomplete(suggest) { 
     $("#guestname").autocomplete({ 
     minLength: 3, 
     source: suggest 
     }); 
    } 

我使用这个jQuery的函数来获取的宾客名单。用户填写一个名为'John'的输入字段。 Ajax正在为包含'John'的名字或姓氏的客人搜索数据库。在同一个脚本(PHP)中,我创建了一个JSON对象,它看起来像[“1234:John Doe”,“...”,“...”](数字是这个客人的ID,猜测那不重要,只是想提一下)。 然后我将JSON传递给jQuery UI的自动完成功能。

在FF和Chrome中一切正常,获得JSON形式的结果后,在输入字段下方打开一个小窗口并显示所有匹配项。 在IE9中,它不像它不工作,但我从来没有得到完整的JSON对象。此外,大多数情况下,我必须写出几乎全部的名字才能获得一场比赛 - 'Sulliv'以获得像'Sullivan'这样的姓氏。在FF中足以写出'Sul'。

在Guest数据库中有8.1k条目。不能IE处理一个很大的JSON,或者我必须改进我的脚本。这是IE和JSON或jQuery常见的问题吗?

回答

0

你应该只初始化自动完成构件一次,然后就可以使用source选项在服务器上执行过滤:

$("#guestname").autocomplete({ 
    minLength: 3, 
    source: function (request, response) { 
     $.ajax({ 
      async: true, 
      url: '../include/searchGuest.php', 
      dataType: 'json', 
      data: 'searchTxt=' + request.term + '&festival_id=<?php echo $festival_id;?>', 
      success: function(data) { 
       response(data) 
      } 
     });   
    } 
}); 
  • request.term是用户搜索术语。
  • response是您必须使用自动完成候选人调用的回调函数。
+0

Atm我在输入字段中使用'keyup'事件。随着你的代码我不知道我应该怎么称呼阿贾克斯。 –

+0

愚蠢的问题是愚蠢的。忘了上面那个。它'有效',但我对IE的问题依然存在。这就像IE不能处理JSON。 –

+0

这很奇怪。你能限制你从服务器返回的结果,看看它是否仍然存在? –