2013-06-11 2 views
0

Я работаю над «модулем подписки» для веб-сайта, все работает отлично, кроме
Ajax.Странное поведение после ajax call

Когда я нажимаю первый время на «подписаться» кнопка меняется на «отписать», но если я нажмите на кнопку «отписаться» снова без перезагрузки страницы, кнопка меняется на «подписаться» и чем " отменить подписку ".

Как если бы я дважды щелкнул его.

Это то, что я могу видеть из "хром -> вкладка сети"

engine/ajax/mywatch.php?subscribe_id=3385&action=plus&skin=Default 
engine/ajax/mywatch.php?subscribe_id=3385&action=minus&skin=Default 

HTML

<a id="subscript-id-3385" onclick="doMywatch('3385', 'plus'); return false;" >subscribe</a> 

Javascript

<script> 
    function doMywatch(a,b){ShowLoading("");$.get(root+"engine/ajax/mywatch.php",{subscribe_id:a,action:b,skin:skin},function(b){HideLoading("");$("#subscript-id-"+a).html(b)});return!1} 
</script> 

PHP

if($_GET['action'] == "plus") { 

    echo <<<HTML 
    <script> 
      alert('plus '); 
    </script> 
    HTML; 
      $row = $db->super_query("SELECT subscriptions FROM " . PREFIX . "_mywatch WHERE user_id={$member_id['user_id']}"); 
      $list = explode(",", $row['subscriptions']); 

      foreach ($list as $daten) { 
        if($daten == $id) $achecker = "stop"; 
      } 


      $error = ""; 

      if($achecker != "stop"){ 

        $list[] = $id; 
        $subsc = $db->safesql(implode(",", $list)); 
        //$subsc = implode(",", $list); 
        if($row['subscriptions'] == "") $subsc = $id; 
        $db->query("UPDATE " . PREFIX . "_mywatch set subscriptions='$subsc' where user_id = '{$member_id['user_id']}'"); 
      } 
        $buffer = "<a onclick=\"doMywatch('" . $id . "', 'minus'); \" title=\"" . $lang['news_minfav'] . "\">unsubscribe</a>"; 

} elseif($_GET['action'] == "minus") { 

echo <<<HTML 
    <script> 
       alert('minus '); 
     </script> 
HTML; 

     $error = ""; 

     $row = $db->super_query("SELECT subscriptions FROM " . PREFIX . "_mywatch WHERE user_id={$member_id['user_id']}"); 
     $list = explode(",", $row['subscriptions']); 

     foreach ($list as $daten) { 
       if($daten == $id) $achecker = "stop"; 
     } 

     if($achecker == "stop"){ 
       $list = array_merge(array_diff($list, array($id))); 
       $subsc = $db->safesql(implode(",", $list)); 
       //$subsc = implode(",", $list); 
       $db->query("UPDATE " . PREFIX . "_mywatch set subscriptions='$subsc' where user_id = '{$member_id['user_id']}'"); 
     } 
       $buffer = "<a onclick=\"doMywatch('" . $id . "', 'plus'); \" title=\"" . $lang['news_minfav'] . "\">Подписатся</a>"; 
} else 
     die("error"); 

$db->close(); 

@header("Content-type: text/html; charset=" . $config['charset']); 
echo $buffer; 
+0

Можете ли вы отформатировать код с разрывами строк и пробелами? Код, который действительно читается, заставляет людей больше желать тратить время на вашу проблему. –

ответ

1

Если я прав, первый раз, когда вы нажмете susbcribe, вы войдете в elseif($_GET['action'] == "plus"), тогда ваш вывод будет <a onclick=......>Unsubscibe</a> и будет помещен в ваш предыдущий <a id="subscript-id-3385">...</a>, поэтому у вас будут два события click для подписки и отписки в том же элемент, поэтому это может привести к некоторому странному поведению. Я предлагаю вам обернуть свою ссылку в div и обновить только div.

+0

нет, я пойду к плюсу. чем '$ buffer' будет' $ buffer = "unsubscribe"; ' – rabotalius

+0

Мой плохой вы правы, но обе части вашего кода делают похожий процесс, главная проблема заключается в том, что у вас будет' unsubscribe ' – Jaay

+0

упаковка с div сделала трюк. Благодарю. – rabotalius

Смежные вопросы