从php向ajax传递数据

9

如何将数据从一个包含多行的 PHP 传回 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>

我的问题是如何在这里显示值?警告消息给我“未定义”?

3个回答

13

您可以沿着这些方向做一些事情。

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
    });
  }
});
...

谢谢 :) echo json_encode($picture); 会返回数据库中的所有10行还是只返回第1行?我刚试了一下,它只输出了第1行。 - Yahoo
还有一个问题,我们得到了响应并将该对象存储在变量pictures中。为什么pictures(3).name不能给我第三条记录的名称?我该如何访问它? - Yahoo
1
应该使用 pictures[2].name 来表示第三个元素,因为 pictures 应该是一个数组。 - Alexander

2

您不能为AJAX响应放置多个echo语句:

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

将您的数组合并并发送单个响应:

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

2
你可以使用一个数组轻松完成此操作:
$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);

@srinivasan - 谢谢,但我想要发送整个数据库的10行回来?我认为这只会发送第一行?不是吗? - Yahoo
@Alexander和Adi Mathur,我已经纠正了错误。请查看更新后的代码。 - Srinivasan Annamalai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接