Я вытаскиваю свои волосы с этой ошибкой, хотя я уверен, что это нечто очевидное. Извиняюсь, если это так.
Следующий javascript успешно устанавливает мой файл cookie:
<script type="text/javascript"> $(document).ready(function(){ $.post('../setCookie.php',{'region':'test'}); }); </script>
Но как только я привяжу тот же код к событию onclick
, вот так …
<script type="text/javascript"> $(document).ready(function(){ $("#us a").click(function(){ $.post('../setCookie.php',{'region':'en-us'}); }); $("#uk a").click(function(){ $.post('../setCookie.php',{'region':'en-gb'}); }); }); </script> <ul> <li id="uk"><a href="http://www.example.com/uk"> <span>Enter UK site</span></a></li> <li id="us"><a href="http://www.example.com/us"> <span>Enter US site</span></a></li> </ul>
.. больше не устанавливает cookie! Несмотря на то, что один и тот же код называется выполненным точно так же (я прохожу через него хорошо и вижу все, как это должно быть).
Повторите: javascript отлично стреляет. Я перехожу через setCookie.php, и все одно и то же … кроме печенья в конце его.
Что происходит? Я предполагаю, что это безопасность браузера или что-то в этом роде?
Для всех, кто интересуется, вот как я решил это:
<script type="text/javascript"> $(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"; } ); }); }); </script>
Я не вижу ничего, что останавливает нормальное нажатие ссылки? Если у вас нет ничего препятствующего нормальному a href
, то не будет времени на выполнение запроса $.post
до того, как страница изменится.
Попробуйте следующее:
$(document).ready(function(){ $('a').click(function(e){ e.preventDefault(); $.post('../setCookie.php',{'region':'test'}); }); });
Он остановит изменение страницы для ссылок, но, по крайней мере, должен передать файл cookie. Теперь, если вы хотите, чтобы страница также была загружена, добавьте в запрос метод onComplete, так что, как только данные cookie будут успешно отправлены, вы можете продолжить смену страницы.
Поместите этот код, где находятся теги <script>: (я предполагаю, что <head>)
$(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 dev tools)
Я полагаю, что я бы сделал в этой ситуации, это изменение события click и его размещение здесь:
<script type="text/javascript"> $(document).ready(function(){ $("#someid > li").click(function(){ $.post('../setCookie.php',{'region':$(this).attr("id")}); }); }); </script>
а потом..:
<ul id="someID"> <li id="uk"><a href="http://www.example.com/uk"> <span>Enter UK site</span></a></li> <li id="us"><a href="www.example.com/us"> <span>Enter US site</span></a></li> </ul>
Я советую не использовать JavaScript \ jQuery внутри вашего HTML, просто используйте document.ready () и привяжите ваши события (если вы, конечно, используете jQuery)
Скорее всего потому, что он пытается получить доступ к jQuery ( $
) до его создания. Было бы лучше использовать document.ready
из вашего первого примера для этого.