我尝试使用php从sql server获取数组,并使用ajax将这些数组解析为javascript。 但是,我已经尝试了谷歌的许多解决方案,我无法获得阵列。
这是我的PHP代码:
<?php
include 'Connect.php';
$Store_int = $_GET['num'];
$sql = "SELECT * FROM `store` WHERE `Place_int` = " . $Store_int;
mysqli_select_db($link, "web");
$link->set_charset("utf8");
$result = mysqli_query($link, $sql);
$arr = array();
while ($row = mysqli_fetch_object($result)) {
$p = (string)$row->Name;
$arr[] = $p;
}
//print_r($arr);
$jsonArr = json_encode($arr, JSON_UNESCAPED_UNICODE);
echo $jsonArr;
mysqli_free_result($result);
mysqli_close($link);
?>
php中的数组将编码并显示:
["pen","pencil","apple","cat","dog"]
和.js文件
function getArr(store_int) {
var jsArray = new Array();
$.ajax({
url: "fromSQL_store.php",
data: {
num: $("#store_int").val()
},
type: "GET",
dataType: "json",
success: function (data) {
alert(num);
jsArray = JSON.parse(data.jsonArr);
}, error: function (data) {
alert("123");
}
});
//alert(jsArray.length);
return jsArray;
}
在.js中,我总是从php得到空响应(undefined)。 因为ajax将回答“错误”函数...,错误状态为200。
答案 0 :(得分:1)
您的数组将始终返回undfined
,因为AJAX
调用是异步的,您的函数会在设置之前返回jsArray
。并且您不需要JSON.parse()
,因为您在ajax调用中将dataType
定义为json
。将函数传递给getArr()
函数并使用该函数中的数据。
function getArr(store_int, outputFn){ // what do you use store_int for?
$.ajax({
url: "fromSQL_store.php",
data: {
num: $("#store_int").val()
},
type: "GET",
dataType: "json",
success: function(data) {
outputFn(data)
},error: function(data){
alert("123");
}
});
}
然后像
一样使用它getArr('5', function (data) {
console.log(data)
})
控制台输出
答案 1 :(得分:0)
你的问题就在这里。您正在尝试访问始终未定义的data.jsonArr
。发送的JSON数据实际上由data
变量实现。
success: function(data) {
alert(num);
jsArray = JSON.parse(data.jsonArr); // Replace by jsArray = data;
}
注意,您可能还需要指定正在输出的MIME媒体类型是JSON。将它放在PHP脚本的顶部可以解决您的问题。
<?php
header('Content-Type: application/json');