2013-03-16 55 views
1

我已經搜索了一會兒,看了一會兒,似乎無法弄清楚這一點。我試圖滿足的唯一要求是返回一個格式正確的JavaScript數組,其中包含sql語句的結果。PHP到JavaScript數組?

I.E.

給定查詢:

SELECT NUMBERS FROM TABLE 

和結果:

NUMBERS 
1 
2 
3 

我想最終得到類似這樣

["1","2","3"] 

請幫數組我知道我在哪裏出錯

這裏是我的PHP代碼

<?php 

$mysqli = new mysqli("local.host.com", "user", "pass", "db"); 

$sql = "SELECT DISTINCT NAME FROM table"; 

$result = $mysqli->query($sql); 

while($row = $result->fetch_array()) 
{ 
    $rows[] = $row['NAME']; 
} 

echo(json_encode($rows)); 


$result->close(); 

/* close connection */ 
$mysqli->close(); 
?> 

這裏是我的javascript:

function GetCards() 
{ 
    var cardarray = new Array(); 

    //alert('test'); 
    $.getJSON('getcardlist.php', function(data) 
    { 
     for(var i=0;i<data.length;i++) 
     { 
      cardarray.push(data[i]); 
     } 

     //return cardarray; 

    }); 

    return cardarray; 
} 

編輯:

多一點信息,我試着設置了jQuery用戶界面自動完成列表中,這是我的設置爲自動填充小部件。

var list = GetCards(); 


$("#name").autocomplete({ 
source: list, 
minLength: 2 

這是錯誤我可是從鉻控制檯越來越

Uncaught TypeError: Cannot read property 'label' of null 
+2

那麼問題是什麼?你得到什麼錯誤? – 2013-03-16 04:22:56

+0

您的代碼沒有提及'label'。 – hjpotter92 2013-03-16 04:33:10

+0

?自動完成使用var列表作爲源,列表由GetCards設置,它調用php頁面。 – Pseudonym 2013-03-16 04:37:01

回答

1

GetCards將返回一個空數組 - 這是你傳遞給自動填充小部件的內容 - 並導致小部件拋出TypeError異常。要通過填充陣列上,移動實例化自動完成到您的getJSON成功回調的代碼(我不知道,你甚至可以通過data需要循環 - 除非你需要以某種方式真正轉變其內容):

$.getJSON('getcardlist.php', function(data) { 
    $("#name").autocomplete({ 
     source: data, 
     minLength: 2 
    }); 
}); 

或者,考慮使用Autocomplete的簡寫直接從數據饋送中加載(see passing source as a string)。但是,如果您需要這種行爲,這種方法可能需要在服務器端進行一些額外的工作,以便在用戶鍵入時過濾列表。

+0

前段時間我已經通過了這個,但是這是一個很好的答案和相關的信息。 – Pseudonym 2014-01-23 17:49:57

0

你必須使用$.each獲取數據

$.getJSON('getcardlist.php', function(data) 
{ 
    $.each(data, function(key, val) { 
     cardarray.push(val); 
    }); 
    //return cardarray; 
}); 
+0

這給了我同樣的錯誤,我剛剛添加上面 – Pseudonym 2013-03-16 04:29:38

+1

您發佈的代碼與您的錯誤無關。發佈相關代碼。 – 2013-03-16 04:32:22