jQuery модальный не обновляется в IE - PullRequest
1 голос
/ 16 июля 2010

Я не могу заставить следующий код работать в IE8, он отлично работает в Firefox.

Пользователь щелкает ссылку, чтобы добавить свойство в свой список избранного. При нажатии я использую 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/

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

Ответы [ 3 ]

7 голосов
/ 17 июля 2010

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

$.ajaxSetup({ cache: false });

Или переключиться на полную $.ajax() версию .load(), например:

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

Любой из них добавляет к вашей строке запроса _=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
  });
2 голосов
/ 01 июля 2011

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

$('#div').load('http://url/whatever', {});
0 голосов
/ 17 июля 2010

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

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

...