Jquery脚本仅在IE中打开新窗口后才起作用

时间:2011-05-14 20:44:38

标签: javascript internet-explorer jquery

下面的脚本查询返回JSON响应的PHP服务。为每个返回的记录创建按钮,允许用户从数据库中删除该记录。下面还会创建一个链接来刷新数据。

这一切在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调用视为普通的Web请求(可缓存),而其他浏览器则认为ajax调用是不可缓存的。

今天学到了新的东西,谢谢你们!

2 个答案:

答案 0 :(得分:1)

也许是因为缓存,您是否尝试清除缓存并重试?这可能会有所帮助http://kb.iu.edu/data/ahic.html#ie8

答案 1 :(得分:0)

也许IE正在扼杀getNew正在生成的格式错误的HTML;请注意,在.each循环中,您没有关闭tr元素。此外,如果您收到JavaScript错误,JS执行可能会停止,因此请确保您的浏览器未配置为忽略JS错误。检查错误控制台。