2013-08-26 49 views
3

我一直在尋找幾天,但找不到修復。通過ajax錯誤的jQuery UI自動完成:

這裏是我的代碼(簡稱爲核心功能):

$("input").autocomplete({ 
    source: function(request, response){ 
     $.ajax({ 
      url: 'inc/ajax.php', 
      type: "GET", 
      async: true, 
      dataType: "json", 
      data: { 
       'task' : 'tasktodo', 
       'squery' : request.term 
      }, 
      success: 
       function(data) { 
        response($.map(data, function(item){ 
         return { 
          label : item['name'], 
          value : item['name'] 
         } 
        })); 
       } 
     });  
    } 
}); 

自動完成的工作,但我得到在我的瀏覽器的控制檯以下錯誤:

Uncaught TypeError: Object has no method 'results' (in Chrome) 
TypeError: this.options.messages.results is not a function (in Firefox) 

錯誤點到jqueryui.js中的一行,在我的腳本中被"response()"調用。

即使錯誤不影響功能,我想知道它爲什麼在那裏。

+0

難道是數據爲空?在這種情況下,地圖失敗 – Stefan

+0

你能分享相關的HTML也 –

+3

它看起來像你是一個實驗性的API稱爲'活躍區域擴展,添加'消息'選項'某種方式...不能從我的最終重新... –

回答

2

很老的問題,但仍適用於今天,因爲它發生了我,我不確定接受的答案涵蓋了所有的基礎,或解釋了問題。

發生這種情況是因爲自動填充插件希望您提供帶有noResults和results屬性的消息對象,以告知其如何標記搜索結果。

noResults屬性應該是一個顯示的字符串,當你猜對了,沒有結果。

results屬性應該是一個接受count參數並返回一個字符串的方法。

事情是這樣的:

$("input").autocomplete({ 
    source: function(request, response){ 
     ... your $.ajax request stuff 
    }, 
    messages: { 
     noResults: "No results", 
     results: function(count){ 
      return count + (count == 0 ? ' result' : ' results'); 
     } 
    } 
}); 

這有可能是調用response(data);避免了需要在所有設置這些屬性。但在我的情況下,一個同事提供了一個消息對象,但已設置noResults和結果屬性的字符串值,因此錯誤:

this.options.messages.results is not a function

+0

謝謝,Breeno,我已經將你的答案標記爲已接受的答案,因爲它詳細解釋了問題。乾杯! –

1

我認爲這是在響應數據地圖功能中的錯誤,你可能需要映射像

response($.map(data.d, function(item){ 
return { 
            label: item.name, 
            value: item.name 
           } 
+0

試過,發現它可以同時工作。雖然沒有解決錯誤,但無論如何感謝! –

+0

@PhilippHasse如果你喜歡答案,請接受它 –

2

嘗試這樣的事情

success: function(data){ 
    response(data); 

}