2011-06-28 149 views
0

我一直堅持jQuery自動完成的實現。我使用本教程:http://1300grams.com/2009/08/17/jquery-autocomplete-with-json-jsonp-support-and-overriding-the-default-search-parameter-q/jQuery自動完成不會顯示來自PHP的JSON響應

我jQuery代碼是這樣的:

$("#quickSearchQuery").autocomplete("http://mydomain.net/json.php", { 
    dataType: 'json', 
    selectFirst: true, 
    minChars: 2, 
    max: 8, 
    parse: function(data) { 
     var rows = new Array(); 
     data = data.members; 
     for(var i = 0; i < data.length; i++) { 
      rows[i] = { id : data[i].id, name : data[i].name, location : data[i].location }; 
     } 
     return rows; 
    }, 
    formatItem: function(row, i, n) { 
     return row.name + ' (' + row.location + ')'; 
    } 
}); 

http://mydomain.net/json.php?q=Alb呼叫產生這樣的JSON響應:

{"query":"Alb","members":[{"id":"1","name":"Peter Albert","location":"New York"},{"id":"4","name":"Adalbert Smith","location":"Alabama"},{"id":"42","name":"Albert Einstein","location":"Vienna"}]} 

我的問題是:它只是沒有按沒有工作。自動完成不會出現,不會創建任何元素。 如果我從教程運行代碼,一切都很好,我會得到自動完成的城市列表。但即使我只更改源URI並從data.geonames更改爲data.members(依此類推),自動完成程序將停止工作。

我已經試過什麼:

  • 我改變dataTypeJSONPJSON,但JSONP創建的JSON文件
  • 我修改了PHP的 '無效的標籤' 錯誤腳本的內容類型與header("Content-Type: application/json");
  • 我試過所有其他Autocompleters,但沒有任何變化
  • 我嘗試了所有修復,我從堆棧溢出和網絡教程中找到答案
  • 我將geonames.org中的JSON響應複製到文件中,並將其上傳到我的服務器,並將此硬編碼響應用作查找源。仍呈現:(

沒有autocompleter也許你有一個想法?

謝謝! 喬

+1

你用什麼域名來調用http://mydomain.com? – genesis

+1

你有任何控制檯錯誤? – calumbrodie

+0

不,沒有JavaScript錯誤。我目前從localhost運行腳本。 – Joe

回答

1

與自動完成,您必須使用屬性ID和值,使其工作。只有那些屬性。用來渲染列表

在你的PHP對象,聲明是這樣的(這一個來自C#,而是認爲你明白吧):

public class Product 
    { 
     public String id { get; set; } //must be used 
     public String value { get; set; } //must be used 
     public String marque { get; set; } 
    } 

並將json序列化的字符串返回給客戶端。

JSON的是類似的東西

[{"id":"1","value":"UMTS","comment":"umts comment"}, 
{"id":"2","value":"RAN","comment":"ran comment"}, 
{"id":"3","value":"Swap","comment":"swap comment"}] 

它會自動映射在你的JS和自動完成應該爲現在的工作。