2012-03-06 3 views
4

У меня есть ajax-поиск, который фильтрует по мере ввода. Он отлично работает в хроме и firefox. Однако, независимо от того, какие данные вы отправляете, IE всегда возвращает тот же ответ. Почему это? Ниже приведен код:ie получает такой же ответ ajax

var cardSearch = $('<div>').addClass('card_search').appendTo($('body')).hide().css({'position': 'absolute', 'width': '350px', 'height': '300px', 'background': '#D5D5D5', 'padding': '10px'}).append(
    $('<div>').css({'background': 'whiteSmoke', 'padding': '5px', 'height': '290px', 'position': 'relative'}).append(
     $('<input>').css('width', '250px').bind('keyup', function(e){ 
      $.post('http://api.redemptionconnect.com/cards/find/?a=' + Math.random(), {data: {title: $(this).val(), limit: 10, page: 1}}, function(r){ 
       $('ul', cardSearch).empty(); 
       for(var i = 0; i < r.data[0].length; i++) 
        $('ul', cardSearch).append(
         $('<li>').append(
          $('<a>').attr('href', 'javascript:void(0)').html(r.data[0][i].Card.title + ' (' + r.data[0][i].CardSet.abbreviation + ')').attr('card_id', r.data[0][i].Card.id).mouseover(function(){showCardTooltip(this);}) 
         ).css({'padding': '5px', 'border-bottom': '1px solid #ccc'}) 
        ); 
      }, 'json'); 
     }), 
     $('<button>').html('Search').css({'width': '70px', 'margin-left': '10px'}), 
     $('<hr>').css('margin-bottom', 0), 
     $('<ul>').css({ 
      'list-style-type': 'none', 
      'margin': 0, 
      'padding': 0, 
      'width': '100%' 
     }) 
    ) 
); 

В хромированном и firefox выходные данные верны. В IE вывод всегда один и тот же, независимо от того, что вы набираете. Я не уверен, что еще включить. Вы можете увидеть, что он работает в http://redforum.blackfireweb.com и нажмите кнопку меню «Поиск карт».

+0

Каков ответ? Как выглядит трафик скрипача? – asawyer

+1

Я уверен, что 'Math.random()' является причиной всего этого. Попробуйте дать ему другие значения каждый раз без него. – gdoron

+0

попытался запустить его, хотя здесь: http://www.jshint.com/? –

ответ

3

IE может быть довольно тяжелым, когда дело доходит до кеширования запросов AJAX. Если вы установите кэш: ложна в .ajax объект JQuery в это добавит свой собственный кэш-перебора строки запроса в URL:

$.ajax({ cache: false }) 

Добавить это выше вашего $ .post() и забросьте собственную, увидеть, что если имеет значение.

+0

Другой вариант - использовать '$ .ajaxSetup ({cache: false});' вверху вашего скрипта, который будет применяться к ** всем ** вызовам AJAX, а не только к определенному. –

+0

Это просто подробное использование метки времени ... Прочтите мой ответ. – gdoron

+1

$ .ajax ({cache: false}) - это не повлияет на другой вызов ajax, например $ .post, не является глобальным методом – charlietfl

1

Попробуйте код с timestamp-ticks вместо random:

$.post('http://api.redemptionconnect.com/cards/find/?a=' + new Date().getTime(), 

Вы можете сделать его еще короче с заменой new Date().getTime() с +new Date

$.post('http://api.redemptionconnect.com/cards/find/?a=' + (+new Date)... 

Предложение: $.ajax({ cache: false }) равно помоему, но многословным , читайте docs:

cacheBoolean:

По умолчанию: правда, ложь для DATATYPE «сценария» и «» JSONP Если установлено значение ложной, она будет принудительно запрошенных страниц не должны быть в кэше браузера.
Установка кэша в значение false также добавляет параметр строки запроса, "_ = [TIMESTAMP]", к URL-адресу.

+0

это не сработало ни – LordZardeck

+0

Спасибо за дополнительную информацию. – Tjkoopa

Смежные вопросы