javascript — Firefox возвращает false; (protectDefault ();) и window.location.reload (); все вместе

Я думаю, что это очень глупый вопрос, но после нескольких часов Google это — у меня нет идеи или решения.
Дело в том, что мне нужно перезагрузить страницу после обработки события «click» на моем веб-сайте. В chrome \ opera работает без проблем. Но в Firefox у меня есть ошибка. Мой код JS с комментариями:

$('#project_create').click(function() {
var projectname = $("#project_name").val();
var projectdescription = $("#project_description").val();
$.post("projects/add_project.php", {
project_name: projectname,
project_description: projectdescription
});
$("#create_project_form").hide("slow");
$("#project_list").show("slow");
//return false; - if it uncomment, all work, but next page reloader doesn't work.
window.location.reload(); //but if it's work, FireFox doesn't send $.post-query
});

Мне нужно работать методы стенда, потому что после нажатия — скрипт ставится в $ _SESSION [ ‘my_var’] некоторая переменная, и эта переменная доступна только после перезагрузки страницы. Может быть есть другие способы сделать это? Как я понимаю проблема здесь в возможностях с Firefox и preventDefault ();

Спасибо!

0

Решение

Проблема в том, что вы просто перезагружаете страницу перед выполнением запроса ajax.

Попробуйте перезагрузить страницу в обработчике обратного вызова AJAX:

$.post("projects/add_project.php", {
project_name: projectname,
project_description: projectdescription
}, function(){
window.location.reload();
});

И удали свою старую window.location.reload()

1

Другие решения

Когда вы делаете return, код после этой строки больше не будет достигнут и считается «мертвым кодом». Один не просто поставить код после return,

Другое, что есть и проблема при использовании return false для предотвращения действий по умолчанию по умолчанию. Это предотвращает делегирование / пузыри. Обработчики событий подключены выше в дереве DOM (особенно те, которые подключены on()) не будет выполнен. Если делегирование имеет значение, не используйте его.

Если ваша цель состоит в том, чтобы предотвратить действие ссылки по умолчанию и делать что-то в JS, используйте event.preventDefault вместо. event Объект передается в качестве первого аргумента в обработчике.

$('#project_create').click(function(event) {
event.preventDefault();

// rest of the code
});
1

В дополнение к тому, что предлагают другие ответы, вы также можете выполнить location.reload метод асинхронного использования setTimeout:

setTimeout(function() { location.reload(); }, 1);
return false;

РЕДАКТИРОВАТЬ: Разумеется, сама идея выполнения асинхронного запроса AJAX и перезагрузки страницы сразу после этого ошибочна, поскольку запрос AJAX может быть не завершен к моменту перезагрузки страницы.

Поэтому вы должны использовать обратный вызов, как это предусмотрено принятым ответом. В качестве альтернативы вы можете использовать синхронный AJAX-запрос, но это остановит выполнение до завершения запроса, что, как правило, нежелательно.

0
По вопросам рекламы [email protected]