Я думаю, что это очень глупый вопрос, но после нескольких часов 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 ();
Спасибо!
Проблема в том, что вы просто перезагружаете страницу перед выполнением запроса ajax.
Попробуйте перезагрузить страницу в обработчике обратного вызова AJAX:
$.post("projects/add_project.php", {
project_name: projectname,
project_description: projectdescription
}, function(){
window.location.reload();
});
И удали свою старую window.location.reload()
Когда вы делаете return
, код после этой строки больше не будет достигнут и считается «мертвым кодом». Один не просто поставить код после return
,
Другое, что есть и проблема при использовании return false
для предотвращения действий по умолчанию по умолчанию. Это предотвращает делегирование / пузыри. Обработчики событий подключены выше в дереве DOM (особенно те, которые подключены on()
) не будет выполнен. Если делегирование имеет значение, не используйте его.
Если ваша цель состоит в том, чтобы предотвратить действие ссылки по умолчанию и делать что-то в JS, используйте event.preventDefault
вместо. event
Объект передается в качестве первого аргумента в обработчике.
$('#project_create').click(function(event) {
event.preventDefault();
// rest of the code
});
В дополнение к тому, что предлагают другие ответы, вы также можете выполнить location.reload
метод асинхронного использования setTimeout
:
setTimeout(function() { location.reload(); }, 1);
return false;
РЕДАКТИРОВАТЬ: Разумеется, сама идея выполнения асинхронного запроса AJAX и перезагрузки страницы сразу после этого ошибочна, поскольку запрос AJAX может быть не завершен к моменту перезагрузки страницы.
Поэтому вы должны использовать обратный вызов, как это предусмотрено принятым ответом. В качестве альтернативы вы можете использовать синхронный AJAX-запрос, но это остановит выполнение до завершения запроса, что, как правило, нежелательно.