2015-11-23 12 views
1

Я пытаюсь обновить страницу на успех Ajax.window.location.replace не работает, если одна и та же страница перезагружается

var lastId = "#" + id; 
window.location.replace("/myurl" + lastId); 

Он пишет правильный URL-адрес моего браузера, но я не вижу внесенных изменений. Если я обновляю (F5) страницу, я вижу изменения правильно, потому что ajax был правильно отложен.

Так что я думаю, что страница не будет принудительно обновлять, если URL-адрес тот же.

В этом примере я уже нахожусь на http://mypage.com/myurl, поэтому он перенаправляет меня на http://mypage.com/myurl#38174, поэтому мой браузер сфокусирует элемент DOM на id="38174".

Как я уже сказал, если я отправлю запрос ajax, мой url изменится на http://mypage.com/myurl#38174 и сфокусирован id="38174", но я не вижу изменений, внесенных в этот элемент моей БД, если я нажму F5, он сфокусирует один и тот же элемент, но с правильно показанными изменениями.

Почему это происходит?

Я также пробовал с window.location.href и window.location без успеха.

Если я использую window.location.replace('http://stackoverflow.com'); он посылает меня на этот сайт правильно ...

Так что я думаю, что проблема при замене одного сайта + какой-то хэштегом ... может быть?

Как я уже сказал, в этом случае, в частности, нам нужно обновить после запроса AJAX, только если это успех, да, это звучит странно и контрпродуктивно, но это необходимо.

+5

Обновление фрагмент URL не вызывает перезагрузку страницы - как вы» видел. Вам нужно будет изменить фрагмент, а затем вызвать 'window.location.reload()' вручную, однако это делает попытку сделать запрос AJAX довольно спорным. Общая идея заключается в том, что вы делаете запрос AJAX, который обновляет хранилище данных, а затем передает достаточную информацию для пользовательского интерфейса, чтобы обновить его. –

+1

Почему вы заставляете перезагружать вызов ajax? Это похоже на противоположность того, что должен делать ajax-вызов. –

+2

Не смысл ли использовать Ajax в том, что вам не нужно перезагружать? – Jono20201

ответ

1
var lastId = "#" + id; 
window.location.replace("/myurl" + lastId); 
window.location.reload(); 
+0

Это действительно сработало –

0

Обновление хэша с URL-адреса не вызовет новый pageload.

Вам нужно будет прослушать событие hashchange в javascript, чтобы инициировать ваш вызов ajax, без необходимости обновления вашей страницы. Это даст вам лучший пользовательский опыт

Если вы используете JQuery, вы можете использовать что-то вроде:

$(window).on('hashchange',function(){ 
    //Do ajax call here 
}); 
+0

Как это поможет перезагрузить страницу * после завершения запроса ajax? – Pointy

+0

Если бы он использовал этот подход, основываясь на своем заявленном намерении, он бы не поставил там вызов ajax, он бы поставил 'window.location.reload();' – weir

Смежные вопросы