我有一个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"}]
答案 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是异步的,并且在服务器返回值之前执行该调用。