2014-02-05 72 views
3

我使用AJAX JSON調用我的PHP文件,以獲取一些數據建立與Twitter預輸入一個自動完成,但一直顯示在下拉結果列表如下:Twitter的阿賈克斯事先鍵入的內容不確定的結果

不確定

未定義

不確定

但是當我做:

alert(data); 

我得到正確的數據顯示,但以某種方式自動完成列表不斷顯示未定義,IVE閱讀和嘗試了一些文章在這裏stackoverflow,但我似乎無法得到它的工作。

我有以下的jQuery代碼:

 $('.item-name .typeahead').typeahead(null,{ 
     source: function (query, process) { 
     $.ajax({ 
      url: 'ajaxItems.php', 
      type: 'POST', 
      dataType: 'JSON', 
      data: 'query=' + query, 
      success: function(data) { 
      // alert(data); 
      process(data); 
      } 
     }); 
     } 
    }); 

而且我ajaxItems.php有測試目的如下代碼:

<?PHP 
$results = array(); 

$results[] = 'jeans'; 
$results[] = 'sweater'; 

$json = json_encode($results); 
print_r($json); 
?> 

的JSON輸出如下:

["jeans","sweater"] 

我希望有人能對我做錯的事情或指向正確的方向發光。先謝謝了!

編輯 我使用下面的預輸入文件: http://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js

+0

我在哪裏可以找到這個?這只是用於顯示結果的鍵入或引導過程函數。 – Adriaan

+0

@Rikesh,process()是typehead代碼的一部分 – davidkonrad

+0

對不起,然後im stucked :(它**是從twitter引導發起的typeahead? – davidkonrad

回答

1

我不得不使用source:類似的問題,我結束了使用remote:。 在你的情況,這將是這樣的:

$('.item-name .typeahead').typeahead({ 
    remote: 'ajaxItems.php?query=%QUERY' 
    }); 

請注意,我在typeahead(null,{刪除null,因爲我認爲這是沒有必要的,但我可能是錯的。顯然,你必須使用$_GET而不是$_POST,但我認爲這樣更容易。

0

問題是預輸入期待與建議,一個陣列。不是JSON!

使用$.makeArray()這樣的:

success: function(data){ 
    process($.makeArray(data)); 
} 

如果沒有,可能是JSON.parse()來應該幫助?

將其標記爲答案,如果有幫助:)

+0

我試過了,沒有做出任何改變,仍未定義undefined。 – Adriaan

+1

它不起作用,但你是對的 - 它在那裏出錯了。我沒有用$ .ajax的JSON解決問題 – davidkonrad

+0

@Adriaan你試過JSON.parse()嗎? –

3

我有完全相同的問題。爲了解決這個問題,我不得不返回包含鍵/值對,像這樣的關鍵「價值」的數組:

[{'value': 'first', 'value': 'second', 'value': 'third'}] 

我不認爲typeahead文檔使它很清楚,但我相信這是displayKey選項默認設置爲'value'。

+0

謝謝!我遇到過同樣的問題。 ASP.Net MVC應用程序從LINQ查詢返回一個字符串數組:「return Json((from i in elementArray select i.StringProperty),JsonRequestBehavior.AllowGet);」這將返回:[「一個字符串」,「另一個字符串」,「其他字符串」]。 Typehead只接受格式:[{Name:「A String」},{Name:「Another String」}]通過將LINQ select改爲匿名類型來實現:「... select new {Name = i。 StringProperty}「,然後在typehead聲明中指定一個displayKey:」.typehead({displayKey:'Name',source:...「 – Luis

+0

這個答案也解決了我的問題。 – Sung

3

最接近的答案是伊恩的雖然它並不真正的工作(只返回最後一個值)。工作答案是:

[{'value': 'first'}, {'value': 'second'}, {'value': 'third'}]