2010-07-16 1 views
1

Я не могу получить следующий код для работы в IE8, он отлично работает в Firefox.jQuery modal не обновляется в IE

Пользователь щелкает ссылку, чтобы добавить собственность к своему списку избранного. При щелчке я использую jQuery для загрузки страницы в модальную. Если они снова нажмут одну и ту же ссылку, код должен быть перезапущен, поэтому отобразится «уже добавлено». В IE он просто отображает оригинальное модальное окно и не обновляется.

Это очень расстраивает ... может ли кто-нибудь помочь мне решить эту проблему?

$(document).ready(function() { 
    var $loading = $('loading image goes here'); 

    $('.add_fav_property').each(function() { 
     var $dialog = $('<div></div>') 
      .append($loading.clone()); 
     var $link = $(this).bind('click', function() { 

      $dialog 
       .load($link.attr('href')) 
       .dialog({ 
        title: $link.attr('title'), 
        width: 400, 
        height: 150 
       }); 

      $link.click(function() { 
       $dialog.dialog('open'); 
       return false; 
      });    
      return false; 
     }); 
    }); 
}); 

JQuery код из http://blog.nemikor.com/2009/08/07/creating-dialogs-on-demand/

Спасибо, Крис.

ответ

0

Я столкнулся с аналогичной проблемой с загрузкой IE и ajax. В основном это сводилось к тому, что IE8 любит кэшировать вещи и отказывается показывать обновленные данные. Измените свою .load-функцию на .ajax и укажите «cache: false».

http://api.jquery.com/jQuery.ajax/

6

У вас есть несколько вариантов, это все о IE кэширует результат здесь. Вы можете использовать $.ajaxSetup() не кэшировать любые JQuery AJAX запросы, например:

$.ajaxSetup({ cache: false }); 

Или перейти к полной $.ajax() версии .load(), как это:

$.ajax({ 
    cache: false, 
    url: $link.attr('href'), 
    dataType: 'html', 
    success: function(data) { 
    $dialog.html(data); 
    } 
}); 

Любой из них добавить к вашему querystring _=XXXXX, где участок XXXXX составляет Date().getTime();. Это не позволяет браузеру использовать кешированный результат, так как он думает, что вы запрашиваете новую страницу.

Третий вариант сделать это самостоятельно, хотя и кажется, что дублирование или работы, как это:

var href = $link.attr('href'); 
$dialog 
    .load(href + (/\?/.test(href) ? "&" : "?") + "_=" + (new Date()).getTime()) 
    .dialog({ 
    title: $link.attr('title'), 
    width: 400, 
    height: 150 
    }); 
1

Passing пустой объект данных (POST) для функции сил нагрузки IE для загрузки содержимого каждый раз.

$('#div').load('http://url/whatever', {});