Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Не работает AJAX в IE7


Автор: zodiac 13.9.2011, 16:59
Здравствуйте!
Столкнулся с такой проблемой: в IE 7 не работает AJAX + JQuery скрипт "бесконечной прокрутки" (сама страничка находится http://topnewgames.ru/freelance/). При нажатии на кнопку "Отправить" новые комментарии не появляются, и не отображаются до тех пор, пока страницу не откроют в новой вкладке. При этом проблема явно не в кодировке (известный баг, его фикс не решает описанное). Я думаю, что раз для отображения комментария приходится открывать страницу в новой вкладке (иначе хоть убей, не работает), IE сбрасывает какой-то очень важный параметр именно когда пользователь закрывает вкладку.
Может и дико звучит, но я раньше ни с чем подобным не сталкивался, и даже не знаю, в каком направлении копать. Код абсолютно работоспособен, по логике, проблем вообще быть не должно. Подскажите, пожалуйста, почему так происходит?

Код

// script for endless scrolling using jQuery
// demo: http://www.jstoolbox.com/demo/endless/
var engine = {

    posts : [],
    target : null,
    busy : false,
    count : 20,
    action : 'list',
    render : function(obj){
        var xhtml = '<div class="post" id=post_'+obj.real_id+'>';
        xhtml += '<div class="content">' + obj.content + '</div>';
        xhtml += '<div class="close"><a href="#"   onClick="deleteMessage('+obj.real_id+');"><img src="./img/delete.png" class="deleteimg" /></a></div>';
        if (obj.posted_at) {
            xhtml += '<div class="posted_at"><span class="post_date">['+obj.posted_at+']</span></div>';
        }
        
        xhtml += '</div>';
        return xhtml;
    },
    init : function(posts, target){

        if (!target)
            return;

        this.target = $(target);

        this.append(posts);

        var that = this;
        $(window).scroll(function(){
            if ($(document).height() - $(window).height() <= $(window).scrollTop() + 50) {
                that.scrollPosition = $(window).scrollTop();
                that.get();
            }
        });
    },

    append : function(posts){
        posts = (posts instanceof Array) ? posts : [];
        this.posts = this.posts.concat(posts);

        for (var i=0, len = posts.length; i<len; i++) {
            this.target.append(this.render(posts[i]));
        }

        if (this.scrollPosition !== undefined && this.scrollPosition !== null) {
            $(window).scrollTop(this.scrollPosition);
        }
    },

    get : function() {

        if (!this.target || this.busy) return;

        if (this.posts && this.posts.length) {
            var lastId = this.posts[this.posts.length-1].id;
        } else {
            var lastId = 0;
        }

        this.setBusy(true);
        var that = this;

        $.getJSON('./php/function.php', {'action':this.action,count:this.count, last:lastId,'text':this.search},
            function(data){
                if (data.length > 0) {
                    that.append(data);
                }
                that.setBusy(false);
            }
        );
    },

    showLoading : function(bState){
        var loading = $('#loading');

        if (bState) {
            $(this.target).append(loading);
            loading.show('slow');
        } else {
            $('#loading').hide();
        }
    },

    setBusy : function(bState){
        this.showLoading(this.busy = bState);
    }
};
function deleteMessage(objid){
    if (objid){
    $.get('php/function.php',{'action':'delete','msg_id':objid},
        function(data){
            $('#post_'+objid).remove();
        });
    }
}
$(document).ready(function(){
    engine.init(null, $("#news"));
    engine.action = 'list';
    engine.get();
    $('#loading').ajaxStart(function(){
        $(this).html("<b>Loading.... </b><img src='./img/loadingAnimation.gif'></img>");
        $(this).show();
    });   
    $('#loading').ajaxStop(function(){
        $(this).empty();
        $(this).hide();
     }); 
    
});

Автор: mcTep 13.9.2011, 18:04
по-моему тут аякса нет. 

Вот этот код вообще перезагружает страницу:
Код

function(data){
    ///$('#news').empty();
    ///$('#news').append(data);
    document.location.href = '';
});


попробуйте убрать это.. Что получится?
может ИЕ болезненно реагирует на обращение к location..

Автор: InfMag 13.9.2011, 21:27
И плюс ко всему, нельзя менять location по document, если браузер и позволяет это делать, это неверно и по сути ошибка.
Код

window.location.href = '…';

А вообще прекрасно работает везде (даже в IE6):
Код

location = '…';

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)