2015-03-02 43 views
-1

我正在使用jquery-autocomplete插件從建議/自動完成中查找數組。PHP json_encode不與1維數組一起工作

REF:https://github.com/devbridge/jQuery-Autocomplete

PHP(1)

$stmt = $dbh->query("SELECT tag_name FROM tags"); 
$tags = array(); 
$tags = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); 
echo json_encode($tags); 
/* 
    var_dump($tags); 
    "array(6) { 
     [0]=> 
     string(1) "tag1" 
     [1]=> 
     string(2) "tag2" 
     [2]=> 
     string(3) "tag3" 
     [3]=> 
     string(4) "tag4" 
    } 
    " 
*/ 

PHP(2)

echo ('["tag1","tag2","tag3","tag4"]'); 

PHP(3)

$a = ["tag1","tag2","tag3","tag4"]; 
echo json_encode($a); 

的JavaScript

$.ajaxSetup({ cache: false, async: false }); 

var myTags = []; 
$.get('/action.php', {action: 'get_tags'}).done(function(data){ 
    console.log(data); 
    myTags = eval(data); 
    //myTags = JSON.parse(data); 
}); 

$('#tagInput').autocomplete({ 
    lookup: myTags 
}); 

PHP v1和PHP v2都會提供一個合適的數組console.log(data)。 但是,來自PHP v1 json_encode($tags)的數組無法與插件一起工作(它只是無法識別數組)。而PHP v2數組echo ('["tag1","tag2","tag3","tag4"]');工作得很好。 PHP v3也不起作用。

這段代碼有什麼問題?爲什麼json_encode()數組未被識別?

+0

你是什麼意思'PHP v1'和'PHP v2'? – Ranjith 2015-03-02 16:22:30

+3

由於您在接收到Ajax響應之前調用'$('#tagInput')。autocomplete({...})'**,所有這些解決方案都無法正常工作。請參閱[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用(http://stackoverflow.com/q/23667086/218196) – 2015-03-02 16:22:39

+0

@Ranjith我的意思是,這兩個代碼proudce相同的輸出數組,但V2作品和V1不 – Azevedo 2015-03-02 16:27:00

回答

0

你V2的作品,因爲你使用了一系列的字符串您的建議,像這樣:

{ 
    "query": "Unit", 
    "suggestions": ["United Arab Emirates", "United Kingdom", "United States"] 
} 

當你要提供的數據字符串數組的直接json_encode不會工作。你需要一個特殊的結構:

{ 
    // Query is not required as of version 1.2.5 
    "query": "Unit", 
    "suggestions": [ 
     { "value": "United Arab Emirates", "data": "AE" }, 
     { "value": "United Kingdom",  "data": "UK" }, 
     { "value": "United States",  "data": "US" } 
    ] 
} 
1

插件將無法「接受」(可能是BUG)的數組,如果數組包含單個字符的字符串,它的條目中:

['tag1','a','tag2','tag3'] // won't work 
['tag1','tag2','tag3'] // works 

所以, PHP的json_encode都可以。