使用ajax将php数组传递给javascript

时间:2017-05-21 20:09:07

标签: javascript php jquery ajax

我尝试使用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。

2 个答案:

答案 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)
})

控制台输出

enter image description here

答案 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');