перезагрузить/обновить страницу javascript

Я думаю, что мой вопрос на самом деле очень прост, и я думал, что ответ где-то скрыт в некоторых связанных вопросах. Но я не мог заставить свой код работать, поэтому вот моя проблема:

Мне нужно прочитать файл, который не периодически выбирается случайно, и сделать действительно хорошие вещи с данными в нем. До сих пор я делал это «локально» (этот файл будет позже на сервере), и это работает просто отлично. Просто для проверки правильности чтения данных изменения в файле были сделаны мной, и я просто нажал F5 в браузере, чтобы получить «новую страницу». Все это хорошо!

Дело в том, что мне нужно, чтобы веб-страница перезагружалась только тогда, когда файл был изменен. Итак, я прочитал файл, проверьте, если update! = lastupdate, чтобы перезагрузить страницу. Проблема в том, что не имеет значения, истинно ли условие или ложно, страница всегда перезагружается!! не круто! Это один из подходов, которые я сделал до сих пор:

setInterval(function() {
    $.getJSON('object.json', function(data) {
        if ( data.update != lastUpdate ){                   
            lastUpdate = data.update;
            window.location.reload();
        }
    });
}, 2000);

Эта функция проверяет каждые 2 секунды, был ли файл изменен, а затем, если это так, перезагружает страницу. Но он перезагружается каждые 2 секунды, а не каждый раз, когда файл изменяется ... Может ли кто-нибудь сказать мне, что я делаю неправильно?

Спасибо и с уважением, Джулс


person jcaz    schedule 27.06.2011    source источник


Ответы (1)


Вам не хватает закрывающей фигурной скобки?

       setInterval(function() {
            $.getJSON('object.json', function(data) {
                if ( data.update != lastUpdate ){                   
                    lastUpdate = data.update;
                    window.location.reload();
                }
            });
        }, 2000);
person Max    schedule 27.06.2011
comment
Спасибо за быстрый ответ, но проблема была не в этом :S Я просто удалил некоторые комментарии к посту и забрал с собой заключительную часть xD ... у вас есть другие идеи? :) - person jcaz; 27.06.2011
comment
Если window.location.reload(); срабатывает, тогда data.update не должен равняться lastUpdate. Замените data.update != lastUpdate на 1 != 1, чтобы доказать себе, что страница не будет обновляться, если они совпадают, а затем либо используйте окна предупреждений, либо консоль javascript в chrome/safari, либо firebug в firefox, чтобы посмотреть на значения data.update и lastUpdate во время выполнения. Надеюсь это поможет. - person Max; 27.06.2011
comment
Привет, вчера не видел твоего ответа, извини. Я понял проблему. Каждый раз, когда страница перезагружается, lastUpdate тоже обновляется, поэтому строка lastUpdate = data.update на самом деле бесполезна! Я попытался не перезагружать страницу, а снова вызвать функцию, которая читает объект и действительно что-то делает с данными. Это не работает, потому что каким-то образом страница теряет все взаимодействие, которое должно быть. Есть идеи, почему? или, может быть, я мог бы написать в файле lastUpdate = update, а затем прочитать обе вещи, и если обновление изменится, снова написать lastupdate = update ...? - person jcaz; 28.06.2011
comment
Жаль, что ты потерял меня сейчас. Когда страница загружается, установите значение последнего обновления на значение, которое использовалось в файле. Если вы обновляете страницу с помощью AJAX, не забудьте обновить переменную lastUpdate. Таким образом, независимо от того, обновляется страница или нет, lastUpdate всегда будет правильным. - person Max; 28.06.2011
comment
Я прочитал файл json и поиграл с ним один раз. У меня есть функция setInterval для чтения одного и того же файла и проверки только того, был ли он изменен (прочитав обновление). Если это были изменения, я хотел бы увидеть изменения, которые были сделаны. Для этого я подумал о перезагрузке страницы location.reload(). Как обновить/перезагрузить страницу с помощью AJAX? - person jcaz; 28.06.2011
comment
AJAX не нужен, обновление страницы тоже может работать. Если бы это был AJAX, javascript/jquery обновил бы DOM следующим образом: $('.#result').html(result); - person Max; 28.06.2011
comment
Привет, Макс, извини, если я слишком нуб, но я не могу использовать такое обновление, потому что lastUpdate тоже обновится. Это означает, что data.update != lastUpdate всегда будет истинным, и страница всегда будет обновляться каждые 2 секунды, что и происходит. Я не понимаю вашего совета с $('.#result').html(result); ... не могли бы вы объяснить это, пожалуйста? спасибо хD - person jcaz; 29.06.2011
comment
Я не думаю, что смогу объяснить более подробно, удачи! - person Max; 29.06.2011