[英]JQuery autocomplete with Array of Objects built with PHP+MySQL
我有一個像這樣的MySQL表:
name | id
John | 1
Mike | 2
Kelly | 3
在Jquery中,我可以使用自動填充功能在彈出列表中顯示“名稱”,同時在輸入中插入“ id”:
var names=[
{label:"John", value:1},
{label:"Mike", value:2},
{label:"Kelly", value:3}
];
$('#myDiv').autocomplete({
source: names
})
這工作正常,但是現在我需要使用PHP復制對象“名稱”的數組。 我正在嘗試以下PHP:
$sql ="SELECT id, nome FROM table";
$result = $pdo->query($sql);
$rows = $result->fetchAll(PDO::FETCH_ASSOC);
$output=array();;
foreach($rows as $key){
array_push($output, array($key{"nome"}=>intval($key{"id"})));
};
echo json_encode($output);
這是返回:
[{"John":1},{"Mike":2},{"Kelly":3}]
在Jquery中,我現在正在使用Ajax調用myscript.php:
var names= [];
$.ajax({
url: "../myscript.php",
success: function (response) {
names = response.split(",");
}
});
但這只是在單元格中顯示相同的結果:
[{"John":1},{"Mike":2},{"Kelly":3}]
因此,我想解決方案是為PHP中的每個對象添加標簽和值,或者什么可以解決問題?
在此先感謝您的幫助!
您需要使用PHP header()方法執行以下操作:
header('CONTENT-TYPE: application/json');
echo json_encode($output);
如果我那里有錯字,可能要參考文檔:)
但是無論如何,一旦JSON的返回類型是正確的內容類型,JQuery就會自動將該響應轉換為對象數組。
[編輯]附錄...問題的第二部分:
自動完成工作取決於您的IDE ...並且您的IDE取決於您所使用的相同語言中的對象定義。 我使用phpStorm。 因此,如果我想在phpStorm中完成自動完成工作以返回JavaScript AJAX,則必須創建一個虛擬JavaScript對象(該對象可以在代碼中的任何位置,甚至可以是僅用於定義的未使用JS文件)虛擬對象...只需具有可通過您的IDE解析的唯一名稱):
//dummy object used for auto-completion to work
function NameObject(param, param2) {
this.label = param;
this.value = param2;
}
然后,在我的AJAX退貨單上,我必須輸入:
success: function(response) {
/** @var NameObject[] response */
}
我不知道執行此操作的任何其他方式,而效果如何取決於IDE。 我從來沒有為JavaScript做過這件事,因為這似乎比它值得的工作還要多。
[edit2]關於格式化PHP以使用命名鍵輸出對象的附錄,好吧,也許我誤會了……起初沒有注意到您的標簽不在輸出的JSON中。...因此在您的PHP中,如果您想要.label和.value起作用,您的PHP需要像這樣生成它:
$results = array();
foreach($rows as $key){
$obj = new stdClass();
$obj->label = $key['nome'];
$obj->value = intval($key['id']);
$results[] = $obj;
};
echo( json_encode($results) );
要么
$results = array();
foreach($rows as $key){
$arr = array();
$arr['label'] = $key['nome'];
$arr['value'] = intval($key['id']);
$results[] = $arr;
};
echo( json_encode($results) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.