浏览器不会从onclick事件中设置cookie
我正在用这个虫子把头发拉出来,虽然我确信这是显而易见的。 道歉,如果是的话。
以下javascript成功设置了我的cookie:
$(document).ready(function(){ $.post('../setCookie.php',{'region':'test'}); });
但是,只要我将相同的代码绑定到onclick
事件,就像这样……
$(document).ready(function(){ $("#us a").click(function(){ $.post('../setCookie.php',{'region':'en-us'}); }); $("#uk a").click(function(){ $.post('../setCookie.php',{'region':'en-gb'}); }); });
..不再设置cookie! 即使相同的代码被称为以完全相同的方式执行(我逐步完成它,并查看它应该是的所有内容)。
重复:javascript正好点火。 我正在逐步完成setCookie.php,一切都是一样的…除了最后没有cookie。
这是怎么回事? 我猜这是浏览器的安全性还是什么?
对于任何有兴趣的人,这是我如何解决它:
$(document).ready(function(){ $("#us a").click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'en-us'}, function() { window.location = "http://www.example.com/us"; } ); }); $("#uk a").click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'en-gb'}, function() { window.location = "http://www.example.com/uk"; } ); }); });
我没有看到任何阻止正常链接点击通过的东西? 如果你没有阻止正常a href
通过,那么在页面改变之前就没有时间做$.post
请求了。
请尝试以下方法:
$(document).ready(function(){ $('a').click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'test'}); }); });
它将停止链接的页面更改,但至少应该传递cookie。 现在,如果您还希望加载页面,则在请求中添加onComplete方法,以便在成功发送cookie数据后,您可以继续更改页面。
将此代码放在
$(document).ready(function(){ $("#us a").click(function(){ $.post('../setCookie.php',{'region':'en-us'}); }); $("#uk a").click(function(){ $.post('../setCookie.php',{'region':'en-gb'}); }); });
如果是安全问题,您将在控制台上看到错误(firebug \ webkit \ IE开发工具)
我想在这种情况下我会做的是改变click事件并将其放在这里:
然后..:
我建议不要在你的HTML中使用JavaScript \ jQuery,只需使用document.ready()并绑定你的事件(如果你当然使用jQuery)
很可能是因为它在创建之前尝试访问jQuery( $
)。 最好在第一个例子中使用document.ready
。