2012-11-09 47 views
1

使用jQuery 1.7.2和jQuery UI 1.8.18。如果我使用本地數據作爲源屬性,一切都按預期工作。根據文檔,源數組可以是字符串值數組或數組對象:使用URL源的jQuery-UI自動完成使用字符串數組但不是對象數組

數組:數組可以用於本地數據。有兩種支持 格式:

字符串數組:[「選擇1」,「選擇2」]

與標籤和值的屬性的對象數組:[{標籤:「選擇1」,值: 「VALUE1」},...]

另外,源屬性可以是如上所示,與格式化的JSON數據進行響應的URL:

字符串:當使用一個字符串,自動完成p lugin期望 字符串指向將返回JSON數據的URL資源。它可以在 位於同一主機上或不同的主機上(必須提供JSONP)。 自動填充插件不會過濾結果,而是會向查詢 字符串添加一個術語字段,服務器端腳本應使用 來過濾結果。例如,如果源選項是 設置爲「http://example.com」,並且用戶鍵入foo,則GET請求 將被設置爲http://example.com?term=foo。數據本身可以是 ,格式與上述本地數據相同。

如果我的JSON響應程序返回一個簡單的字符串數組,自動完成工作就像它應該的一樣。但是,如果我的JSON響應程序返回格式如上所示的對象數組,則會向URL發出請求,但不會填充下拉列表。 JavaScript控制檯顯示沒有錯誤。

自動完成調用看起來是這樣的:

var source_url = '/json/codes.php?type=globalcode&cid=25'; 
$('.gcode').autocomplete({ 
     minLength: 2, 
     source: source_url 
}); 

,應答器是用PHP編寫。這僅僅是一個存根,直到我得到這個問題很好解決:

header('Content-Type: application/json, charset=UTF-8'); 
... 
if(!$_REQUEST['type'] || !$_REQUEST['cid']){ 
     echo('[]'); 
     return false; 
} 
if($_REQUEST['type'] == 'globalcode'){ 
     $cid = sprintf("%d", $_REQUEST['cid']); 
     $stub = "[ { label: 'Label for 1234', value: '1234' }, { label: 'Label for 5678', value: '5678' } ]"; 

     echo($stub); 
     return false; 
} 

再次,它的工作原理與這兩種陣列時,數據是本地的,並與字符串值數組工作時的數據是遙控器。當數據是遠程對象數組時,該列表永遠不會填充,並且JavaScript不會引發錯誤。

+0

我要補充一點,那回來的響應如下所示:[{標籤: '1234標籤',值:'1234'},{標籤:'標籤爲5678',值:'5678'}] – matthewsewell

回答

2

你有無效的JSON,這是從來沒有登錄控制檯。 JSON不能有single quotes,使用雙引號,也可以用JSONLint來檢查你的JSON。

這是你的JSON的有效版本:)

[ 
    { 
    "label": "Labelfor1234", 
    "value": "1234" 
    }, 
    { 
    "label": "Labelfor5678", 
    "value": "5678" 
    } 
] 
+0

這解決了它。我最初使用的雙引號與文檔中的示例完全相同,但與文檔一樣,我沒有引用標籤和值鍵。我想,一旦我在真實數據上使用json_encode()而不是使用手寫存根,所有事情都會結束。無論哪種方式,在JSONint鏈接上的好建議。我不熟悉它。 – matthewsewell

0

你可以使用json_encode(而不是

$stub = array(
array(
    "label"=>"Labelfor1234", 
    "value"=>"1234" 
), 
array(
    "label"=>"Labelfor5678", 
    "value"=>"5678" 
) 
); 
echo json_encode($stub); 
相關問題