Где я иду не так - AJAX - PullRequest
       2

Где я иду не так - AJAX

0 голосов
/ 15 июля 2010

У меня есть следующая ссылка -

<a href="ex.com" onClick="return popitup2('<?php echo $var3; ?>');">Grab Coupon</a>

Где я инициализировал $ var3 следующим образом

$var3 = "brand1,camp2";

Код функции popitup2 () - -

<script language="javascript" type="text/javascript">
function popitup2(id) {
$.ajax({
   url: "http://jainkunal.com/wordpress/wp-content/trackclicks/clickcounter.php"+"?"+id,
   success: function(){
     alert( "Data Saved: " );
   }
 });
    newwindow2=window.open('','name','height=225,width=350');   
var tmp = newwindow2.document;

.... еще немного кода ... ... в конце ...

    return true;
}
</script>

Теперь, когда я нажимаю на ссылку, ex.com открывается без предупреждения, т.е. без запуска php-скрипта через ajax и javascript после этого. Если я уберу вызов ajax из функции popitup2 (), то оставшийся JavaScript будет выполнен правильно.

Ответы [ 3 ]

1 голос
/ 16 июля 2010

Согласитесь с предыдущим ответом, что вы выполняете асинхронный Ajax-запрос.Из документации параметр Async может не работать в 2 случаях: междоменные запросы или если dataType: "jsonp".Если вы делаете междоменный запрос, я могу предложить только:

<a href="ex.com" onClick="return popitup2('<?php echo $var3; ?>', this);">Grab Coupon</a>
<script type="text/javascript">
function popitup2(id, link) {
  $.ajax({
    url: "http://jainkunal.com/wordpress/wp-content/trackclicks/clickcounter.php"+"?"+id,
    context: link,
    success: function(){
      alert( "Data Saved: " );
      window.location = $(this).attr("href");
   }
  ....
  return false;
});

При таком подходе мы точно отслеживаем клики.Существует еще одна проблема, связанная с такими подходами: сервер отслеживания должен работать быстро, иначе пользователь будет долго ждать перехода к ресурсу.

0 голосов
/ 15 июля 2010

Вы передаете два аргумента функции JS. Но прототип функции (первая строка) принимает только один. Это приводит к ошибке JS.

0 голосов
/ 15 июля 2010

Здесь происходит то, что вы выполняете асинхронный AJAX-запрос, то есть, когда вы выполняете запрос, остальная часть вашей функции продолжает выполняться. Когда возвращается результат AJAX, он запускает alert в вашей функции success, но, поскольку вы нажали ссылку, вы уже ушли с этой страницы.

Попробуйте добавить async: false к параметрам функции ajax, чтобы дождаться возвращения результата, прежде чем продолжить, например:

$.ajax({
    url: "http://jainkunal.com/wordpress/wp-content/trackclicks/clickcounter.php"+"?"+id,
    async: false,
    success: function() {
       alert( "Data Saved: ");
    }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...