2012-06-09 47 views
6

Làm cách nào tôi có thể chuyển dữ liệu từ php của các hàng sau đó trở về ajax?Chuyển dữ liệu từ php sang 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> 

Câu hỏi của tôi là làm thế nào tôi có thể hiển thị các giá trị ở đây? Thông báo cảnh báo đang cho tôi "Không xác định"?

Trả lời

10

Bạn có thể làm điều gì đó dọc theo các dòng này.

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

Thankyou :), sẽ có 'echo json_encode ($ picture);' chỉ trả về hàng thứ nhất hoặc tất cả 10 hàng từ cơ sở dữ liệu? Tôi vừa thử nó, nó lặp lại chỉ là hàng của 1? – Yahoo

+0

OK! đã phải echo $ hình ảnh không hình ảnh :) Cảm ơn bạn, câu trả lời của bạn là hoàn hảo – Yahoo

+0

Có, tôi đã có một lỗi đánh máy ở đó. – Alexander

2

Bạn không thể đặt nhiều echo báo cáo cho các phản ứng AJAX:

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

Tham mảng của bạn và gửi phản hồi duy nhất:

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

Bạn có thể dễ dàng làm điều này bằng một mảng duy nhất:

$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

tôi có thể thấy chỉ có một '$ pic' :) – Alexander

+0

@srinivasan - Cảm ơn, Nhưng tôi muốn gửi toàn bộ 10 dòng của một cơ sở dữ liệu trở lại? Tôi nghĩ rằng điều này sẽ chỉ gửi hàng của 1? Phải không? – Yahoo

+0

@Alexander và Adi Mathur, tôi đã sửa lỗi ngay bây giờ. Vui lòng xem mã cập nhật. –

Các vấn đề liên quan