Плагин jQuery не возвращает результаты JSON от AJAX - PullRequest
0 голосов
/ 13 апреля 2011

Итак, я использую этот плагин jQuery: jSuggest
Который основан на этом плагине: autoSuggest

Вот jsFiddle с (рабочей) демонстрацией jSuggest: 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, и я получаю его от FireBug)

Однако единственное, что я когда-либо получаю в выпадающем списке, это "No Results Found" Может кто-нибудь найти ошибку в моем коде?

Я также пробовал:

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

и различные комбинации "value" и "name".

Я не могу понять, почему это не работает. Любая помощь?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Этот плагин может иметь свои преимущества, но автор, похоже, страдает от значительного недопонимания того, как работает 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" будет обновлена ​​до выполнения последней (показанной) строки кода. Однако это просто не будет правдой, и «theData» является ключевым объектом, который управляет всем механизмом автозаполнения.

Исходный код (для плагина "autoSuggest", который, по-видимому, является прародителем "jSuggest"), выглядит критически по-разному в этом коде и корректно откладывает интерпретацию данных JSON, возвращаемых из вызова ajax в процедуру обработчика .

0 голосов
/ 13 апреля 2011
  $( '#name' ).jSuggest({source: "components/suggItem.php",                              
selectedItemProp: "name", 
seekVal: "name"  
 });

Все эти три свойства необходимы для его работы.Убедитесь, что оно работает, передав исходное свойство массиву, а не URL-адресу, и, как только это произойдет, попробуйте URL-адрес.

...