2015-04-22 42 views
0

我需要一些幫助來設置DB標記檢索。我對於回傳到底是什麼感到困惑。以下是我迄今爲止:準備SQL - AJAX返回數據

返回的數據:

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

如何去檢索數據?以上都沒有工作。

這是推動我堅果..應該我只是$ .ajax而不是?

+0

有什麼問題?你不能在'markers()'之外訪問'opdata'? – tymeJV

+0

不能得到opdata裏面的函數,函數外面(數據) – user4713659

+1

那麼數據調用是異步的,如果你想在調用之後使用它,請使用回調 – tymeJV

回答

0

.done的調用是異步的,這意味着.done立即完成,在進行ajax調用之前,即使http調用尚未完成,也會立即調用console.log

根據你的使用情況和背景

你可以有3個選項之間選擇回到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); 
}); 
+0

謝謝。現在讓我試試這個。 – user4713659

+0

謝謝你們所有的例子!現在我有一些工作=] – user4713659