2014-02-05 94 views
0

內置對象數組我有一個MySQL表所示:JQuery的自動完成與PHP + 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中的每個對象添加標籤和值,或者可以解決問題的方法是什麼?

在此先感謝您的幫助!

+1

敢肯定你只需要在「標籤」和「值」添加到PHP的對象,那應該返回你正確格式化的值。 – Mordred

+1

此外,爲了更容易處理json content-type,請使用$ .getJSON而不是$ .ajax。請參閱http://api.jquery.com/jquery.getjson/ – Jojo

+0

@Mordred我只是想,但它不工作,你會粘貼一個示例代碼來替換:array_push($ output,array($ key { 「諾姆」} => INTVAL($鍵{ 「ID」}))); –

回答

1

您需要使用PHP頭()方法來做:

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和。價值的工作,你的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)); 

OR

$results = array(); 
foreach($rows as $key){ 
    $arr   = array(); 
    $arr['label'] = $key['nome']; 
    $arr['value'] = intval($key['id']); 
    $results[] = $arr; 
}; 
echo(json_encode($results)); 
+0

即將返回:警告:無法修改標題信息 - 已由(在...處開始的輸出)發送的標題以及上述相同的結果。 –

+0

然後,您在回聲代碼之前回顯了一些防止發送標題的內容,就像它說的那樣。這可能是因爲你實際上在你的代碼中回顯了某些東西,或者它可能是一個簡單的錯誤,比如在某個文件中有一個?>之後有空格或返回,這就是爲什麼PHP建議不要使用關閉文件的原因? > –

+0

http://stackoverflow.com/questions/1793482/php-error-cannot-modify-header-information-headers-already-sent –