Ссылка Javascript, ajax, jquery, курсор - это текстовый редактор, а не рука / палец, и хотя код работал, он всегда возвращает результат ошибки - PullRequest
0 голосов
/ 04 сентября 2010

Теперь это действительно сбивает с толку ... Обновление базы данных mysql не покидая страницу .... У меня есть 3 бита кода. Javascript в тегах head, кнопка действия в теле и код, который нужно выполнить на другой странице. Вот три раздела:

<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">

function addItemToUsersList(itemId)
{
  $.ajax({
      'url': 'member-bucketadd-exec.php', 
       'type': 'GET',
      'dataType': 'json', 
      'data': {itemid: itemId}, 
       'success': function(data) 
       {
           if(data.status)
           {
               if(data.added)
                {
                        $("span#success"+itemId).attr("innerHTML","Item added to your personal list");
                        alert("Item added to your list!");

                 }
                 else
                 {
                        $("span#success"+itemId).attr("innerHTML","This item is already on your list");
                        alert("This item is already on your list!");

                }
            }
       },
       beforeSend: function() 
         {
               $("span#success"+itemId).attr("innerHTML","Adding item to your bucketlist...");

         }
          ,'error': function(data) 
          {
          // what happens if the request fails.
            $("span#success"+itemId).attr("innerHTML","An error occureed");
            alert("On your list!");
        }
});
                  }
     </script>

Кнопка действия ...

   <a onclick="addItemToUsersList(<?php echo $itemid ; ?>)">Add<img src='images/plus-green.png' /> </a>

И код, который запускается на другом URL ...

<?php 

ini_set('display_errors', 'On');
error_reporting(E_ALL);


 $bucketlist=MYSQL_QUERY( "SELECT * FROM membersbuckets where userid = $userid AND bucketid = $bucketid")
 or die(mysql_error());  

          $bucketlist=mysql_fetch_array($bucketlist) ;

if($bucketlist < 1) 
 {
    mysql_query("INSERT INTO membersbuckets (memberbucketid, userid, bucketid, complete)
    VALUES ('', '$userid', '$bucketid', '0')");
        return json_encode(array("status" => true, "added" => true));
 }
 else
 {
        return json_encode(array("status" => true, "added" => false));
 }


?>

Неважно, если элемент уже находится в списке (как будто он должен проверять область <1) или нет в списке, я всегда получаю предупреждение («В вашем списке!»); , а также бит ссылки / кнопки активации, когда я наведу на него, я не получаю руку / палец, я просто получаю текстовый курсор !! </p>

Я никогда не использовал jquery или ajax до этого маленького проекта, поэтому понятия не имею, что искать, чтобы увидеть, что неуместно. Я скачал firebug и проверил его, но не вижу никаких проблем. Кто-нибудь может помочь?

Спасибо всем и всем заранее! надеюсь, что вы можете помочь.

Ответы [ 4 ]

1 голос
/ 16 апреля 2011

Чтобы избежать href="#", вызывающего перескок страницы наверх, ваша onclick функция должна возвращать false.Это говорит браузеру не продолжать стандартное действие href.Это можно сделать несколькими способами, включая добавление return false; в конец addItemToUsersList() или даже непосредственно в код onclick, например:

onclick="addItemToUsersList(<?php echo $itemid ; ?>); return false;"
1 голос
/ 04 сентября 2010

проверьте руководство php для mysql_fetch_array ваш код в

   $bucketlist = mysql_fetch_array($bucketlist) 

будет FALSE без строк.

0 голосов
/ 04 сентября 2010

a) Проверьте ваш запрос .ajax:

    <script type="text/javascript" src="./jquery-1.4.2.min.js"></script> 
    <script type="text/javascript"> 

    function addItemToUsersList(itemId) { 
      $.ajax({ 
           'url': 'http://localhost/test/add_member.php',  /*test6ed in my PC*/
           'type': 'GET',   'dataType': 'json',  
           'data': {itemid: itemid, userid: 1},            /*Added itemid, userid */

            /*Params in 'success function*/
           'success': function(data, textStatus, XMLHttpRequest){ 
            if(data.status) { 
              if(data.added) $("#success").attr("innerHTML","Item added"); 
              else $("#success").attr("innerHTML","Already on your list"); 
            } 
           }, 
           beforeSend: function(XMLHttpRequest){ 
               $("#success").attr("innerHTML","Adding item ..."); 
         },
         'error': function(XMLHttpRequest, textStatus, errorThrown) { 
                $("#success").attr("innerHTML","An error occureed"); 
                alert("On your list!"); 
            } 
    }); 
} 
     </script>

    <a href="javascript:addItemToUsersList(1)">Add</a>
    <span id="success"></span>

2) Ваш серверный PHP-код должен получать те же параметры в вашем .ajax-запросе и возвращая эхом ответное предложение

$userid   = $_GET['userid' ] ? $_GET['userid']: 0 ;
$bucketid = $_GET['itemid']  ? $_GET['itemid']: 0 ;

if(!$bucketid || !$userid ) 
     echo json_encode( array("status" => false, "added" => false)); 

$sql =  "SELECT * FROM membersbuckets where userid = $userid AND bucketid = $bucketid";
$bucketlist = mysql_query( $sql ) or die(mysql_error());   

$bucketlist = mysql_fetch_array($bucketlist) ; //return FALSE in no rows 

if($bucketlist){ 
    $insert_sql = "INSERT INTO 
                        membersbuckets 
                                 (memberbucketid, userid, bucketid, complete) 
                          VALUES ('', '$userid', '$bucketid', '0')"  ;

    mysql_query($insert_sql);

    //return with an echo 
    echo json_encode(array("status" => true, "added" => true));
 }else { 
    echo json_encode(array("status" => true, "added" => false)); 
 } 
0 голосов
/ 04 сентября 2010

Рука / палец не появляется
потому что он не определен для отображения по умолчанию для якорей без атрибута href. Просто добавьте href="#" к своему якору или назначьте стиль cursor: pointer своему якору, и он укажет.

Результат возврата ошибки
Как указал Тау, в вашем коде обработки запросов ajax в запросе вы используете две переменные $_GET['userid'] и $_GET['itemid'], но вы передаете в запрос только itemid. Это причина ошибки? Вы узнали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...