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

Javascript 在Jquery Ajax中访问多维PHP数组,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个php脚本在我的MSSQL服务器实例上运行SQL查询。我得到了一个好结果。现在我正试图从$.ajax操作它的结果,但是在我的Jquery ajax中,访问obejct表中的字段的“Object.field\u name”方式似乎不起作用(可能是因为返回了多行) 该表是用php编码的json_。你能帮我访问这些数据并把它放在一个全局变量中吗 PHP脚本 <?php header('Access-Control-Allow-Origin: *'); header('Content-Ty

我有一个php脚本在我的MSSQL服务器实例上运行SQL查询。我得到了一个好结果。现在我正试图从$.ajax操作它的结果,但是在我的Jquery ajax中,访问obejct表中的字段的“Object.field\u name”方式似乎不起作用(可能是因为返回了多行)

该表是用php编码的json_。你能帮我访问这些数据并把它放在一个全局变量中吗

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


?>
在没有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"}]
问题是:

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

2:最后一个
警报(my_数据)直接在
$(文档)上方。准备好(获取我的数据)my_data
之前调用code>。这是因为ajax是异步的。

问题是:

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


2:最后一个
警报(my_数据)直接在
$(文档)上方。准备好(获取我的数据)my_data
之前调用code>。这是因为
$.ajax
是异步的。

您无法从该范围访问
my\u数据,因为
$.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();
});

您无法从该范围访问
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();
});

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

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

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

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

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

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

首先是
success
firming?ajax错误处理程序在哪里?您的CORS配置似乎缺少其他几个
访问控制
标题如果您向
我的数据[0]发出警报,您会得到什么。id
?看起来您的结果是一个对象数组,但我不知道您是显示了三个单独的结果,还是显示了一个包含三行的结果?此外,如果您使用
console.log()
而不是
alert()
并检查浏览器控制台的输出,您将可以获得更多的数据,这应该可以让您探索输出。@charlietfl for my CORS(忘了它们吧。我添加了一行,但它们还可以)。。。接下来是错误阴影。不用担心,因为这个脚本以前曾在“Hello world”的案例中使用过,而且很有效。现在唯一的事实是它是一个多维数组,而且我想使用一个全局数组variable@xjstratedgebx好的,我想问题解决了
my_数据[0]。id
刚刚打印了“1”。。。。但是我仍然无法在我的全局变量
myu data
ajax是异步的。您无法访问警报中的数据,因为该数据尚未返回。你需要在成功中消耗它。不要使用alert调试数据/变量…使用控制台调试启动器是否成功?ajax错误处理程序在哪里?您的CORS配置似乎缺少其他几个
访问控制
标题如果您向
我的数据[0]发出警报,您会得到什么。id
?看起来您的结果是一个对象数组,但我不知道您是显示了三个单独的结果,还是显示了一个包含三行的结果?此外,如果您使用
console.log()
而不是
alert()
并检查浏览器控制台的输出,您将可以获得更多的数据,这应该可以让您探索输出。@charlietfl for my CORS(忘了它们吧。我添加了一行,但它们还可以)。。。接下来是错误阴影。不用担心,因为这个脚本以前曾在“Hello world”的案例中使用过,而且很有效。现在唯一的事实是它是一个多维数组,而且我想使用一个全局数组variable@xjstratedgebx好的,我想问题解决了
my_数据[0]。id
刚刚打印了“1”。。。。但是我仍然无法在我的全局变量
myu data
ajax是异步的。您无法访问警报中的数据,因为该数据尚未返回。你需要在成功中消耗它。不要使用alert调试数据/变量…使用console“您必须使用async:false调用ajax”甚至不应该成为讨论的主题,而应该说永远不要使用它。。。。这是一个可怕且有缺陷的概念。它现在也被浏览器供应商弃用,并且如果您确实使用它,将在控制台中记录警告it@charlietfl很好的提示,我会用你的评论更新我的答案。“你必须用async:false调用ajax”不应该成为讨论的话题,而应该说永远不要使用它。。。。这是一个可怕且有缺陷的概念。它现在也被浏览器供应商弃用,并且如果您确实使用它,将在控制台中记录警告it@charlietfl好提示,我会用你的评论更新我的答案。好的,我知道了。我可以使用
我的_数据[0]访问它。id
知道如何使用来自success函数的数据定义我的_数据并在以后使用吗?一种方法是在
success
回调中定义
我的_数据后放置需要运行的代码。另一种方法是使用
承诺
。如果你有大量的逻辑,
pr