jQuery插件不返回AJSON的JSON返回结果

时间:2011-04-13 00:20:27

标签: javascript jquery ajax jquery-plugins autosuggest

所以我正在使用这个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."
                        });

当我在文本框中输入“ch”时,这是从"components/suggItem.php"返回的字符串:

[ {"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 个答案:

答案 0 :(得分: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”将在执行最后一行(显示)之前更新。然而,这并不是真的,“theData”是驱动整个自动完成机制的关键对象。

原始代码(对于“autoSuggest”插件,似乎是“jSuggest”的祖先)在该代码周围看起来截然不同,并且它正确地推迟了从ajax调用返回到处理程序例程的JSON数据的解释

答案 1 :(得分:0)

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

所有这三个属性都是必需的。通过直接将源属性传递给数组而不是url来验证它的工作原理,一旦这样做,请尝试使用url。