Jquery скрипт работает только после открытия нового окна в IE - PullRequest
0 голосов
/ 15 мая 2011

Сценарий ниже запрашивает службу PHP, которая возвращает ответ JSON. Кнопки создаются для каждой возвращаемой записи, что позволяет пользователю удалить эту запись из базы данных. Ниже также создана ссылка для обновления данных.

Все это прекрасно работает в IE, Chrome, Safari ... IE (пробовал 8 и 9), однако, имеет странную проблему.

Когда страница загружается, я могу обновить данные, нажав ссылку «обновить». После этого нажатие не дает никакого эффекта, ЕСЛИ Я не открою ту же страницу в другом окне IE, щелкните ссылку в новом окне и вернусь в исходное окно. Затем ссылка «обновить» работает в новом окне ОДИН раз. Затем он превращается в порочный круг.

Ваша помощь приветствуется!

function getNew(){ 
    $('#new').remove();
    $.getJSON('service.php', function(data) {   
        var items = [];

        items.push('<tr><th>EmplId</th><th>ExternalID</th><th>Name</th></tr>');   

        $.each(data, function(key, val) {

            var indiv = val.toString().split(",");
            items.push('<tr>');
            var id = indiv[0];

            $.each(indiv, function(index, value) {
                items.push('<td align="center" id="' + index + '">' + value + '</td>');
            });

            items.push('<td  class="updateButton" align="center" onclick=\'return update("'+id+'")\'>Update</td>');

        });

        items.push('<tr><td  class="refreshButton" align="center" onclick=\'return getNew();\'>Refresh </td></tr>');

        $('<table/>', {
            'id': 'new',
            html: items.join('')
        }).appendTo('body');
    });
}

function update (emplID){
    $.ajax({
        url: "service.php?emplID="+emplID,
        context: document.body,
        success: function(){
            $('#new').remove(); 
            getNew();
        }
    });
}

Я пытался использовать .live и получаю те же результаты.

$(".refreshButton").live("click" , function() { 
    getNew(); 
    $.ajax({
        url:     "Service.php?emplID=", 
        context: document.body, 
        success: function(){       
            $('#new').remove();     
            getNew(); } 
    }); 
});

Я отключил кеш, но безрезультатно. ЕДИНСТВЕННЫЙ способ заставить ссылку работать, это открыть ту же страницу в отдельном окне, щелкнуть ссылку и вернуться в исходное окно. Есть ли какое-то решение для этого?

$(".refreshButton").live( "click" , function() { 
    getNewStudents(); 
    $.ajax({
        url: "studentService.php?emplID=",
        cache: false,
        context: document.body,
        success: function(){

            $('#newStudents').remove();

            getNewStudents();
        }
    });
});

Спасибо за ваши предложения. Я исправил tr, но похоже, что решение было использовать

 $.ajaxSetup({ cache: false });

Кажется, все версии IE обрабатывают вызовы ajax как обычные веб-запросы (кешируемые), тогда как другие браузеры считают вызовы ajax не кешируемыми.

Сегодня узнал что-то новое, спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Может быть, это из-за кеша, вы пытались очистить кеш и попробовать снова?это может помочь http://kb.iu.edu/data/ahic.html#ie8

0 голосов
/ 15 мая 2011

Возможно, IE душит искаженный HTML, который генерирует getNew;обратите внимание, что в цикле .each вы не закрываете элемент tr.Кроме того, если вы получаете ошибку JavaScript, выполнение JS может остановиться, поэтому убедитесь, что ваш браузер не настроен так, что он игнорирует ошибки JS.Проверьте консоль ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...