使用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不會引發錯誤。
我要補充一點,那回來的響應如下所示:[{標籤: '1234標籤',值:'1234'},{標籤:'標籤爲5678',值:'5678'}] – matthewsewell