2011-04-13 94 views
0

所以我使用這個jQuery插件: jSuggest
這是基於這個插件:autoSuggestjQuery插件不返回從AJAX的JSON返回的結果

下面是與jSuggest的(工作)演示一個的jsfiddle: demo

這是我使用的實例在我的網頁插件的代碼:

<form id="add" action="components/AddItem.php" method="post" enctype="multipart/form-data" class="center clear"> 
      <fieldset> 
       <legend>Basic Information</legend> 
       <label for="name">Name</label> 
       <br /> 
       <input type="text" name="name" id="name"/> 
       ...[snip]... 
     </form> 

$('#name').jSuggest({ 
         source: "components/suggItem.php", 
         selectedItemProp: "name", 
         seekVal: "name", 
         selectionLimit: 1, 
         uniqID: "item", 
         keyDelay: 100, 
         newText: "You must click outside the text box to add a new item." 
         }); 

這是從"components/suggItem.php"當我輸入 「CH」 到文本框中返回字符串:

[ {"value":"1","name":"Cheeseburger"},{"value":"3","name":"Fish Sandwich"} ]

(這是Content-type: application/json,我從螢火得到它)

不過,我只有永遠得到的下拉列表是"No Results Found"。任何人都可以在我的代碼中找到一個bug?

我也曾嘗試:

$('#name').jSuggest({ 
         source: "components/suggItem.php", 
         seekVal: "name", 
         }); 

"value""name"各種組合。

我不明白爲什麼這不起作用。任何幫助?

+0

是什麼讓你選擇了特定的插件?我沒有看到它的ajax處理代碼可能可以正常工作。 – Pointy 2011-04-13 00:44:11

+0

@Pointy我喜歡Drew Wilson的插件,這個插件修復了他的很多bug。我願意提供更好的建議......您的意思是哪個AJAX部分?它使用jQuery的getJSON,所以我認爲它非常穩定。 – rockerest 2011-04-13 00:45:07

+0

它*誤用* getJSON - 您發佈的代碼似乎假定getJSON的結果將立即可用,這是錯誤的。您發佈的代碼看起來與可能來自插件主頁http:// scottreeddesign的代碼有很大不同。com/project/jsuggest – Pointy 2011-04-13 00:50:08

回答

3

該插件可能有其優點,但作者似乎正在對AJAX的工作方式產生重大誤解。這裏該代碼:

 // If the data is a URL, retrieve the results from it. Else, the data is an object, retrieve the results directly from the source. 
     if (dType === 'string'){ 

      // Set up the limit of the query. 
      var limit = qLimit ? "&limit="+encodeURIComponent(qLimit) : ''; 

      // Build the query and retrieve the response in JSON format. 
      $.getJSON(theData+"?"+opts.queryParam+"="+encodeURIComponent(string)+limit+opts.extraParams, function(rData){ theData = rData; }); 

     } 

     // Call the custom retrieveComplete function. 
     theData = opts.retrieveComplete.call(this, theData); 

出現給我假設「的getJSON」的通話將同步調用該函數的參數,使得變量「海圖」,將代碼,去年(如圖所示)行前更新被執行。然而,這不會是真的,「theData」是驅動整個自動完成機制的關鍵對象。

原始代碼(對於「jsuggest」的前身「autoSuggest」插件)在該代碼周圍看起來截然不同,並且它正確地將從ajax調用返回的JSON數據的解釋推遲到處理程序常規。

+0

經過一些測試,試圖從JSON網址獲得結果不適用於這個插件,而使用硬編碼數據集看起來很好。由於JSON網址與「祖先」插件完美配合,我認爲這確實是問題所在。 – rockerest 2011-04-13 03:59:53

0
$('#name').jSuggest({source: "components/suggItem.php",        
selectedItemProp: "name", 
seekVal: "name" 
}); 

所有這三個屬性都需要它的工作。通過直接傳遞source屬性數組而不是url來驗證它是否工作正常,一旦嘗試了url。

+0

所以它看起來像插件中的JSON處理程序不起作用,因爲我總是包含這三個屬性,並且您的建議是先嚐試數組,然後才能成功。關於爲什麼JSON不起作用的任何想法? – rockerest 2011-04-13 01:00:23