使用json从PHP文件获取数据失败

时间:2014-12-16 15:32:59

标签: php jquery ajax json

我无法从PHP文件中获取每个数据,我总是遇到AJAX失败,我尝试了很多东西,并为这个问题寻找了一些页面,但我无法找到任何解决方案,这是我最后的地方。 这是我的jQuery函数:

$(document).ready(function () {

$(function () {
$('a[class="someclass"]').click(function(){

   var somedata = $(this).attr("id");

   $.ajax({
      type: "POST",
      url: "foo.php",
      data: {"id": somedata}, 
      dataType:"json",

      success: function(data){
         e.preventDefault();
         $("#data1").html(data[0]);
         $("#data2").html(data[1]);
         $("#data3").html(data[2]);
         $("#data4").html(data[3]);
      },
      error:function(){
          alert("AJAX request was a failure");
      }
    });
    });
    });
});

这是我的PHP文件:

$data = $_POST['id'];

$con = mysqli_connect('localhost','root','','database');
if (!$con) {
  die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"database");
$sql="SELECT * FROM table WHERE id = '".$data."'";
$result = mysqli_query($con,$sql);


while($row = mysqli_fetch_array($result)) {

  $jsondata1 = array($row['data1'], $row['data2'], $row['data3'],  $row['data4']); 

  echo json_encode($jsondata1);
 }
mysqli_close($con);

我认为没有必要共享HTML文件,但如果你想我可以与你分享。 谢谢!

4 个答案:

答案 0 :(得分:0)

你要覆盖循环中的数组值并回显$ jsondata1,所以你要在循环中发送许多带有echo的不同数组,试试这段代码:

 $jsondata1 = array();

 while($row = mysqli_fetch_array($result)) {

    $jsondata1[] = array($row['data1'], $row['data2'], $row['data3'],  $row['data4']); 

 }

 echo json_encode($jsondata1);

答案 1 :(得分:0)

e.preventDefault();是个问题。 e未定义,如果是,则在调用成功函数时已经发生了默认操作。尝试

$('a[class="someclass"]').click(function(e){
    e.preventDefault();
   var somedata = $(this).attr("id");

   $.ajax({
      type: "POST",
      url: "foo.php",
      data: {"id": somedata}, 
      dataType:"json",

      success: function(data){
         $("#data1").html(data[0]);
         $("#data2").html(data[1]);
         $("#data3").html(data[2]);
         $("#data4").html(data[3]);
      },
      error:function(){
          alert("AJAX request was a failure");
      }
    });
    });
    });
});

答案 2 :(得分:0)

您需要对完整的响应进行编码。 当你回显每个编码时,它将无法工作。 做点什么

$jsonArray = array();
while(){
    array_push($jsonArray, array($row['data1'], $row['data2']);
}
echo json_encode($jsonArray);

答案 3 :(得分:-1)

当你需要做的是将这些中间变量分配给一个数组并使用json encode对该数组进行编码时,你多次调用json_encode。

PHP:

$data = $_POST['id'];

$con = mysqli_connect('localhost','root','','database');
if (!$con) {
  die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"database");
$sql="SELECT * FROM table WHERE id = '".$data."'";
$result = mysqli_query($con,$sql);

$jsondata1 = [];
while($row = mysqli_fetch_array($result)) {
    $jsondata1[] = array($row['data1'], $row['data2'], $row['data3'],  $row['data4']); 
}
mysqli_close($con);

die(json_encode($jsondata1));

JavaScript的:

$(document).ready(function () {
var doc = $(document);
doc.on('click', 'a.someclass', function(e){
    e.preventDefault();
    var somedata = $(this).attr("id");

   $.ajax({
      type: "POST",
      url: "foo.php",
      data: {"id": somedata}, 
      dataType:"json",
      success: function(data){
          $("#data1").html(data[0]);
          $("#data2").html(data[1]);
          $("#data3").html(data[2]);
          $("#data4").html(data[3]);
      },
      error:function(){
          alert("AJAX request was a failure");
      }
  });
});

});