2012-06-09 14 views
6

¿Cómo puedo pasar los datos de un php de y luego vuelvo a ajax?Pasando datos de php a ajax

PHP

$query = 'SELECT * FROM picture order by rand() LIMIT 10'; 
$result = mysql_query($query); 

while ($rec = mysql_fetch_array($result, MYSQL_ASSOC)) { 

$url[]=$rec['pic_location']; 
$name[]=$rec['name']; 
$age[]=$rec['age']; 
$gender[]=$rec['gender']; 


} 

echo json_encode($url); 
echo json_encode($name); 
echo json_encode($age); 
echo json_encode($gender); 

Ajax

$(".goButton").click(function() { 
    var dir = $(this).attr("id"); 
    var imId = $(".theImage").attr("id"); 

    $.ajax({ 
     url: "viewnew.php", 
     dataType: "json", 
     data: { 
     current_image: imId, 
     direction : dir 
     }, 
     success: function(ret){ 
      console.log(ret); 
      var arr = ret; 
      alert("first image url: " + arr[0][0] + ", second image url: " + arr[0][1]); // This code isnt working 
      alert("first image Name: " + arr[1][0] + ", second image name: " + arr[1][1]); 
      $(".theImage").attr("src", arr[0]); 
      if ('prev' == dir) { 
      imId ++; 
     } else { 
      imId --; 
     } 
     $("#theImage").attr("id", imId); 
     } 
    }); 

}); 
}); 
</script> 

Mi pregunta es ¿cómo puedo mostrar los valores aquí? El mensaje de alerta me está dando "indefinido"?

Respuesta

10

Puede hacer algo en esta línea.

PHP

$query = 'SELECT * FROM picture order by rand() LIMIT 10'; 
$res = mysql_query($query); 

$pictures = array(); 
while ($row = mysql_fetch_array($res)) { 
    $picture = array(
    "pic_location" => $row['pic_location'], 
    "name"   => $row['name'], 
    "age"   => $row['age'], 
    "gender"  => $row['gender'] 
); 
    $pictures[] = $picture; 
} 

echo json_encode($pictures); 

JS

... 
$.ajax({ 
    ... 
    dataType: "json", 
    ... 
    success: function(pictures){ 
    $.each(pictures, function(idx, picture){ 
     // picture.pic_location 
     // picture.name 
     // picture.age 
     // picture.gender 
    }); 
    } 
}); 
... 
+0

Gracias :), ¿el 'echo json_encode ($ picture);' devolverá solo la 1ra fila o las 10 filas de la base de datos? Acabo de probarlo, ¿está haciendo eco solo en la fila de 1? – Yahoo

+0

¡Lo tengo! tuvo que repetir $ pictures not picture :) Gracias, su respuesta fue perfecta – Yahoo

+0

Sí, tuve un error tipográfico allí. – Alexander

2

No se puede poner múltiples echo declaraciones para la respuesta AJAX:

echo json_encode($url); 
echo json_encode($name); 
echo json_encode($age); 
echo json_encode($gender); 

Únase a sus matrices y enviar una única respuesta:

$arr = $url + $name + $age + $gender; 
echo json_encode($arr); 
2

Usted puede hacer esto utilizando una única matriz:

$pics = array(); 

while ($rec = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $pics[$rec['id']]['url'] = $rec['pic_location']; 
    $pics[$rec['id']]['name']=$rec['name']; 
    $pics[$rec['id']]['age']=$rec['age']; 
    $pics[$rec['id']]['gender']=$rec['gender']; 
} 

echo json_encode($pics); 
+0

puedo ver sólo una '$ pic' :) – Alexander

+0

@srinivasan - Gracias, pero quería enviar la totalidad de las 10 filas de una base de datos de vuelta? Creo que esto solo enviaría la fila de 1? ¿No es así? – Yahoo

+0

@Alexander y Adi Mathur, he corregido los errores ahora. Por favor mira el código actualizado. –

Cuestiones relacionadas