簡體   English   中英

jQuery通過使用PHP + MySQL構建的對象數組自動完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM