准备 SQL - AJAX return 数据

Prepare SQL - AJAX return Data

我需要一些帮助来设置数据库标记检索。我对到底要传回什么感到有点困惑。这是我目前所拥有的:

返回数据:

["Chatswood NSW AU","Chippendale NSW AU"]

JS:

var opdata = [];
    function markers() {
            $.post("id.php", {id: <?php echo $id; ?>})
            .done(function(data) {
                //data is array returned
                opdata = data; //Tried this
                $(opdata) = data; //Tried this
                opdata.push(data); //Tried this
                $.each(data, function(i) { //Tried this
                    opdata.push(data[i]);
                });
            });
            console.log(opdata); //Shows [] empty array regardless what i do
        }

PHP:

$arr = array();
while (  $selectData -> fetch() ) {
    $arr[] = $address;
}
echo json_encode($arr);

我该如何检索数据?以上 None 有效。

这让我抓狂..我应该只 $.ajax 吗?

.done 的调用是异步的,这意味着 .done 在 ajax 调用之前立即完成,而 console.log 在之后立即调用,甚至如果 http 调用还没有完成。

根据您的用例和上下文,您可以在 3 个选项中进行选择以 return opdata 返回到调用函数:

///// OPTION 1: synchronous call
function markersUsingSynchronousCallToAjax() {
    var opdata = [];
    $.ajax({
        type: "POST",
        url: "id.php",
        async: false, // disable asynchronous call to ajax
        data: {id: <?php echo $id; ?>},
        success: function(data) {
            opdata = data;
        }
    })
    return opdata;
}
var opdata = markersUsingSynchronousCallToAjax();
console.log("using a synchronous ajax call", opdata);


///// OPTION 2: callback 
function markersUsingCallback(callback) {
    $.post("id.php", {id: <?php echo $id; ?>})
    .done(function(data) {
        callback(data);
    });
}
markersUsingCallback(function(opdata){
    console.log("using a callback", opdata);
});



///// OPTION 3: promise 
function markersUsingPromise(callback) {
    return $.post("id.php", {id: <?php echo $id; ?>});
}
markersUsingPromise().done(function(opdata){
    console.log("using a promise", opdata);
});