Javascript jQuery插件不返回AJAX的JSON返回结果
所以我使用这个jQuery插件:Javascript jQuery插件不返回AJAX的JSON返回结果,javascript,jquery,ajax,jquery-plugins,autosuggest,Javascript,Jquery,Ajax,Jquery Plugins,Autosuggest,所以我使用这个jQuery插件: 它基于此插件: 下面是一个JSFIDLE,其中包含jSuggest的(工作)演示: 这是我用来在我的页面上实例化插件的代码: <form id="add" action="components/AddItem.php" method="post" enctype="multipart/form-data" class="center clear"> <fieldset> <l
它基于此插件: 下面是一个JSFIDLE,其中包含jSuggest的(工作)演示: 这是我用来在我的页面上实例化插件的代码:
<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>
这是在文本框中键入“ch”时从“components/suggItem.php”
返回的字符串:
[{“value”:“1”,“name”:“Cheeseburger”},{“value”:“3”,“name”:“Fish Sandwich”}]
(这是内容类型:application/json
,我是从FireBug获得的)
但是,我在下拉列表中得到的唯一一件事是“找不到结果”
。有人能在我的代码中找到bug吗
我也尝试过:
$( '#name' ).jSuggest({
source: "components/suggItem.php",
seekVal: "name",
});
以及“值”
和“名称”
的各种组合
我不明白为什么这不起作用。有什么帮助吗
$( '#name' ).jSuggest({source: "components/suggItem.php",
selectedItemProp: "name",
seekVal: "name"
});
所有这三个属性都是它工作所必需的。通过直接向源属性传递数组(而不是url)来验证它是否有效,一旦传递完毕,请尝试url
所有这三个属性都是它工作所必需的。验证它是否可以通过直接将源属性传递给数组而不是url来工作,一旦传递给源属性,请尝试url。该插件可能有其优点,但作者似乎对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”将在执行最后一行(如图所示)代码之前更新。然而,这不是真的,“数据”是驱动整个自动完成机制的关键对象
原始代码(对于“autoSuggest”插件,它似乎是“JSSuggest”的前身)与该代码的外观截然不同,它正确地将ajax调用返回的JSON数据的解释延迟到处理程序例程。该插件可能有其优势,但是作者似乎对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”将在执行最后一行(如图所示)代码之前更新。然而,这不是真的,“数据”是驱动整个自动完成机制的关键对象
原始代码(对于“autoSuggest”插件,它似乎是“JSSuggest”的前身)与该代码的外观截然不同,它正确地将ajax调用返回的JSON数据的解释延迟到处理程序例程。是什么让您选择了该特定插件?我不知道它的ajax处理代码如何能正常工作。@Pointy我喜欢Drew Wilson的插件,这个插件修复了他插件中的许多错误。我愿意接受更好的建议。。。你指的是哪一部分?它使用jQuery的getJSON,所以我认为它非常可靠。它误用了getJSON——您发布的代码似乎假设getJSON的结果将立即可用,这是错误的。您发布的代码看起来也与插件主页上的代码有很大不同,后者是“官方”JSugest插件。我正在使用的插件是基于Drew Wilson的autoSuggest插件,并且只命名为jSuggest,因为我想,作者不知道其他插件。这是我得到链接的地方。更新:@Pointy看来你在JSON问题上是对的。你能详细解释一下这个问题吗?@Pointy,如果你把你的答案(“JSON被破坏了”)作为一个答案,我会给你的。我已经切换到jquery.ui自动建议。不太好看,但我完全理解。是什么让你选择了那个插件?我不知道它的ajax处理代码如何能正常工作。@Pointy我喜欢Drew Wilson的插件,这个插件修复了他插件中的许多错误。我愿意接受更好的建议。。。你指的是哪一部分?它使用jQuery的getJSON,所以我认为它非常可靠。它误用了getJSON——您发布的代码似乎假设getJSON的结果将立即可用,这是错误的。您发布的代码看起来也与插件主页上的代码有很大不同,后者是“官方”JSugest插件。我正在使用的插件是基于Drew Wilson的autoSuggest插件,并且只命名为jSuggest,因为我想,作者不知道其他插件。这是我得到链接的地方。更新:@Pointy看来你在JSON问题上是对的。你能详细解释一下这个问题吗?@Pointy,如果你把你的答案(“JSON被破坏了”)作为一个答案,我会给你的。我已经切换到jquery.ui自动建议。不太好看,但我完全理解。因此,插件中的JSON处理程序似乎不起作用,因为我总是包含这三个属性,而您的建议是先尝试数组,结果成功了。你知道为什么JSON不起作用吗?看来插件中的JSON处理程序不起作用了,因为我一直都包含了这三个属性,而你的建议是先尝试数组,结果成功了。关于JSON为什么不起作用有什么想法吗?经过一点测试,尝试从JSON url获取结果对这个插件不起作用,而使用硬编码的数据集似乎没问题。由于JSON url与“progenitor”插件完美配合,我认为这确实是一个问题。经过一点测试,试图从JSON url获得结果与此插件不起作用,而使用硬编码数据集似乎很好。由于JSON url与“progenitor”插件完美配合,我认为这确实是个问题。