2011-07-07 19 views
6

¿Cómo puedo publicar algunos datos ajax en la función del controlador y recuperarlos? Porque quiero publicar un número entero en la función y obtener otro entero (total de votos para el elemento cuya ID está publicada), y cuando tenga éxito quiero hacerme eco de ese número de votos. No sé cómo puedo publicar el "id" en la función del controlador. Por favor, vea mi código:publicar datos ajax en PHP y devolver datos

//post this integet 
the_id = $(this).attr('id'); 

     $.ajax({ 
      type: "POST", 
      data: the_id, 
      url: "http://localhost/test/index.php/data/count_votes", 
      success: function(){ 
       //the controller function count_votes returns an integer. 
       //echo that with the fade in here. 

       } 
      }); 

Respuesta

13
$.ajax({ 
      type: "POST", 
      data: {data:the_id}, 
      url: "http://localhost/test/index.php/data/count_votes", 
      success: function(data){ 
       //data will contain the vote count echoed by the controller i.e. 
       "yourVoteCount" 
       //then append the result where ever you want like 
       $("span#votes_number").html(data); //data will be containing the vote count which you have echoed from the controller 

       } 
      }); 

en el controlador

$data = $_POST['data']; //$data will contain the_id 
//do some processing 
echo "yourVoteCount"; 

Aclaración

pienso que usted está confundiendo

{data:the_id} 

con

success:function(data){ 

tanto el data son diferentes por su propio bien claridad puede modificarlo como

success:function(vote_count){ 
$(span#someId).html(vote_count); 
+0

Quizás quiso decir después postng el ID de controlador de funciones, i debería simplemente hacer eco dentro de la función? Quiero mostrar los $ datos sobre el éxito con '$ (" span # votes_number "). html (número);' – billa

+0

ver los '$ data' recibirá la identificación que ha enviado desde el cliente lado en la base de esa 'ID' probablemente hagas un poco procesando y calculando el 'total de votos', luego' echo' el 'voteCount' que has calculado y recíbelo en la devolución de llamada' success', luego puedes mostrar el 'voteCount' donde quieras, voy a modificar un poco la respuesta una mirada – Rafay

+0

gracias hombre. funciona, pero me pregunto por qué funcionará si 'eco' "tuVoteCount"; 'en el número del controlador, pero no funcionará si devuelvo tuVoteCount; en ese caso, no obtendré ningún dato sobre el éxito. ¿Cual es la razón? gracias de nuevo. – billa

3

Para la JS, tratar

data: {id: the_id} 
... 
success: function(data) { 
     alert('the server returned ' + data; 
    } 

y

$the_id = intval($_POST['id']); 

en PHP

+0

Gracias, esto es lo que estoy buscando. Necesito publicar la ID en el controlador y el controlador devolverá otro entero ($ vote_count), necesito publicar eso en el momento del éxito. Pero si lo entiendo correctamente, su ejemplo alerta al ID que estoy publicando en el controlador, no a los datos del controlador. – billa

3

¿Cómo se ve el count_votes? ¿Es un guion? Todo lo que desee recuperar de una llamada ajax puede recuperarse usando un eco simple (por supuesto, puede usar JSON o xml, pero para este ejemplo simple solo tendría que generar algo en count_votes.php como:

$id = $_POST['id']; 

function getVotes($id){ 
    // call your database here 
    $query = ("SELECT votes FROM poll WHERE ID = $id"); 
    $result = @mysql_query($query); 
    $row = mysql_fetch_row($result); 

    return $row->votes; 
} 
$votes = getVotes($id); 
echo $votes; 

esto es sólo pseudocódigo, pero debe darle la idea. lo que nunca se hacen eco de count_votes será lo que se volvió a "datos" en su llamada AJAX.

+0

count_votes simplemente obtiene el número (entero) de votos de la base de datos para la ID publicada. En mi función de ajax, en caso de éxito quiero obtener este número para poder hacer un eco como '$ (" span # votes_number ").html (número); ' – billa

+0

Entonces, usando su ejemplo, el valor que saca de su script" count_votes "será interpretado como la variable javascript" data ", entonces $ (" span # votes_number "). html (data); – serialworm

+0

gracias hombre. Me pregunto por qué funciona si hago eco de los $ votos en el controlador, pero ¿no funcionará si "devuelvo" los $ votos? – billa

Cuestiones relacionadas