2013-09-23 5 views
12

Я хочу изменить статус пользователя при нажатии кнопки, так что все, что я делаю, это определение текущего состояния и изменение, если необходимо.window.location.reload не работает для Firefox и Chrome

Но в этом случае изменяется статус в бэкэнд, но для отображения состояния, которое должна обновляться страница, так как при обновлении он проверяет текущий статус и показывает. Поэтому я использую свойство «window.location.reload», чтобы показать последний статус на странице

Все работает отлично в IE. Но в случае Firefox и Chrome статус не меняется. Я думаю, что «window.location.reload» не работает, потому что, когда я просто прокомментирую эту строку и попробую нажать кнопку и вручную обновить страницу, она покажет изменения Status.

Можете ли вы предложить, что я должен использовать, чтобы сделать эту работу в Firefox и Chrome?

Когда я googled, я нашел где-то это работает в Firefox и Chrome, если вы дадите его в «setTimeout()». Я попробовал, но даже тогда он не работает для меня.

<script> 

    $(document.body).on('click', '#activate', function() { 
     var pkgVersion = $(this).attr('data-version'); 
     alert("@Url.Action("SetActivePackage", "Deployment")", { version: pkgVersion }); 
     $.get("@Url.Action("SetActivePackage", "Deployment")", { version: pkgVersion }).done(function() { 

     }); 
     setTimeout(function() { window.location.reload(data); }, 0); 
    }); 
</script> 

Пожалуйста, предложите!

+2

'$ .get (материал) .done (window.location.reload);' – adeneo

+0

Кроме того, попробуйте 'window.location.reload (истина)', но не внутри тайм-аут, как это, но в обработчик успеха для вызова ajax. – adeneo

+0

setTimeout (location.reload.bind (location), 0); ? – dandavis

ответ

20

У меня есть два других варианта к вам:

history.go(0); 

А:

window.location.href = window.location.href; 

Я не проверял его на Firefox и Chrome, но она может помочь вам быстрее. Завтра я сделаю тесты и обновлю ответ, если это не сработает.

+2

спасибо за то, попробовал оба варианта, но не повезло :-(, Также я немного изменил свой код. Теперь его «window.location.reload (data)»; в конце концов, но та же проблема не перезагружается автоматически – UID

+0

@ user2719346 Возьмите посмотрите мое обновление. –

+1

спасибо за создание Fiddle ... действительно понравились примеры ... но, к счастью, моя проблема решена, но с помощью MVC ... Спасибо в любом случае! – UID

10

Вы пробовали это ?:

window.location = window.location; 

Видимо, вы можете оставить «окно.», Но не пробовал сам.

+0

что он должен делать? –

+3

Он перезагрузит страницу без POST-данных, а reload() сохранит данные POST, это единственное различие, насколько я знаю? – adeneo

+0

@adeneo interesting! Thx –

2

У меня была такая же проблема в Chrome и Firefox. Я смог устранить проблему, отвечая на сервер URL-адресом страницы. Для вашего случая вы можете получить ответ на новое значение для статуса пользователя. Вот два примера:

$.post('?action=' + myAction, function (data) { 
     window.location.href = data; 
    }); 

ого ответ сервер

Response.Write("/yourUrl); 
Response.End(); 

Это устранило несоответствие в Chrome и перезагружается страница бесперебойно.

1

Look this Вы можете заставить перегрузочное получить страницу с сервера, установив параметр forceGet истины:

location.reload(true); 
18

Я имел эту проблему в AngularJS и в Firefox. (Перезагрузка в Chrome была прекрасной). С помощью решения setTimeout.

setTimeout(function(){ 
    window.location.reload(); 
}); 
+1

Блестящий. Спасибо :) Я пробовал каждый другой ответ, но только этот работает. И я ожидаю, что это сработает в любой ситуации – 2bigpigs

+1

Или просто: 'setTimeout (location.reload)' – wintercounter

+1

Исходное решение сработало для меня. Используя регулярное location.reload(), работал во всем, кроме Firefox, поэтому я рад, что вы разместили это. –

0

Ключ к сведению с моей точки зрения является то, что расположение функции для меня должна была быть выше места, в которой происходит вызов. Думая, что браузер интерпретирует javascript сверху вниз, если мой код для перезагрузки находился ниже объекта, который его вызывает, он терпит неудачу. Если я поставил над ним код, window.location.href = window.location.href; работал.

+1

Когда вы предлагаете, чтобы «определение функции должно появляться перед вызовом функции», обратите внимание, что это верно только для выражений функции (var my_function = function() {}), а не для объявлений функций (function my_function() {}). Объявление функций выполняется, а выражения функций - нет; поэтому, когда вы говорите, что «браузер компилирует JS сверху вниз» (в первую очередь, браузеры интерпретируют JS, они не компилируют его), что не совсем точно. –

+0

Достаточно честный, обновленный, чтобы отражать интерпретацию вместо компиляции, согласился бы, js не компилируется. Я добавил детали, потому что мне понадобилось немного времени, чтобы понять, почему я не мог перезагрузить страницу, и решил, что мое решение может быть значительным для других, если у них схожие проблемы. спасибо Сэнсэю за ответ. –

1

Здесь это работает со мной с Fire Fox, а также с Crome и его работой с IE.

object.reload(forcedReload); 
Смежные вопросы