在Jquery Ajax中访问多维数组PHP数组

时间:2016-06-05 19:34:35

标签: javascript php jquery ajax

我有一个PHP脚本在我的MSSQL Server实例上运行SQL查询。我得到了一个好结果。现在我试图从$ .ajax中操纵它的结果但是似乎在obejct表中的“Object.field_name”访问字段的方式在我的Jquery Ajax中不起作用(可能因为返回了更多的一行)< / p>

该表是在php中的json_encoded。您能帮助我访问这些数据并将其置于全球可用的数据中吗?

PHP脚本

<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');  //Newly added
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL);

  try {
    $hostname = "SQLEXPRESS";
    $port = 1433;
    $dbname = "MY_BD";
    $username = "user";
    $pw = "password";
    $dbh = new PDO ("sqlsrv:Server=$hostname,$port;Database=$dbname","$username","$pw");
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
   }catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
  }

 $stm = $dbh->prepare("SELECT * FROM dbo.emp");
 $stm->execute();

$table_1 = array();
while($row = $stm->fetch(PDO::FETCH_ASSOC)){
    $table_1[] = $row;
}

echo json_encode($table_1);


?>

Javascript脚本

var my_data ;

function get_my_data(){

$.ajax({
    type: 'POST',
    url: 'http://localhost:8012/My_Script/test_1.php',
    dataType: "json",
    crossDomain: true,
    success: function(result) {
      my_data = result;
      alert(my_data); //This will alert [Object object]
      alert(my_data.id); //This will alert undefined ; id being on of the 
      //result fields
    }
  });
}

alert(my_data); //This will alert undefined (not even [Object Object]
//as if the global variable my_var can't be access in the $.ajax part
$( document ).ready(get_my_data);

没有Jquery Ajax,浏览器中我的php脚本的输出是:

[{"id":"1","name":"John","sal":"1525.21","age":"45"}]
[{"id":"2","name":"Cecily","sal":"854.75","age":"28"}]
[{"id":"3","name":"Alfred","sal":"945.28","age":"37"}]

3 个答案:

答案 0 :(得分:1)

问题是:

1:您没有正确访问my_data属性。 my_data是一个对象数组。要访问第一个对象的id属性,请使用my_data[0].id

2:在定义alert(my_data);之前调用$( document ).ready(get_my_data);正上方的my_data。这是因为$.ajax是异步的。

答案 1 :(得分:1)

您无法从该范围访问my_data,因为$.ajax是异步的。

但我可以建议你这样做

var my_data;

function get_my_data() {

  $.ajax({
    type: 'POST',
    url: 'http://localhost:8012/My_Script/test_1.php',
    dataType: "json",
    crossDomain: true,
    success: function(result) {
      my_data = result;
      //alert(my_data); // this is an array you can't alert it do console.log(my_data)
      //alert(my_data.id); // you can't access id directly because it's an array
      // rather you can do this way loop/map over it will return each array item
      my_data.map(function(data) {
        alert(data.id);
      })
    }
  });
}

//as if the global variable my_var can't be access in the $.ajax part
$(document).ready(function() {
  get_my_data();
});

答案 2 :(得分:0)

我认为您正在寻找的是一种迭代结果的方法。

$(my_data).each(function(index,value) {
    alert(value.id);
});

应该有效。至于使这个全球化。在调用之外声明变量并将其设置为成功,您应该能够访问它。它未定义的原因是ajax是异步的,并且在服务器返回值之前执行该调用。