我认为这是一个非常愚蠢的问题,但经过几个小时的谷歌搜索 - 我不知道或解决方案。关键是我需要在我的网站上处理"点击"事件后重新加载页面。在chrome''opera中,它可以毫无问题地工作。但是在火狐中我有一些错误。我的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'] 一些变量,并且它的变量仅在重新加载页面后可用。也许还有其他方法可以做到这一点?正如我所理解的那样,火狐和 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
});
除了其他答案建议的内容外,您还可以使用 setTimeout
异步执行 location.reload
方法:
setTimeout(function() { location.reload(); }, 1);
return false;
编辑:当然,运行异步AJAX请求并立即重新加载页面的整个想法是有缺陷的,因为当您重新加载页面时,AJAX请求可能尚未完成。
因此,您应该按照接受的答案的建议使用回调。或者,您可以使用同步 AJAX 请求,但这会在请求完成之前冻结执行,这通常是不可取的。