【发布时间】:2009-07-11 16:26:06
【问题描述】:
jQuery v1.2.6
jQuery.autocompleter 插件 v1.1pre(来自 jQuery 的网站)
我无法使用 'type: "POST"' 提交回我的网络服务。我无法让它被自动完成器识别。想法?
只要我查找“q”查询字符串,下面的代码就可以正常工作。但是,我希望在未来通过传递更多参数来将其用于更高级的功能,并希望了解如何使用自动完成器回发。
我知道 extraParams 选项。但是,这些是通过 GET 或 POST 提交的额外参数(如果我们可以让 POST 工作)。它不会将其更改为作为 POST 提交。
$(function() {
$('#searchBox').autocomplete(
"/services/college.asmx/lookupColleges",
{
delay: 5,
minChars: 1,
matchSubset: 1,
matchContains: 1,
cacheLength: 10,
autoFill: false,
dataType: 'json',
parse: function(data) {
var rows = new Array();
for (var i = 0; i < data.length; i++) {
rows[i] = {
data: data[i]
, value: data[i].Data
, result: data[i].Name
};
}
return rows;
},
formatItem: function(row, i, n) {
return row.Name;
}
}).result(function(event, row) {
processSelection(this, row.Data);
});
});
我尝试添加 POST 选项,如下面的代码示例中所述。但它仍然作为 GET 提交。
delay: 5,
minChars: 1,
matchSubset: 1,
matchContains: 1,
cacheLength: 10,
autoFill: false,
dataType: 'json',
type: 'POST',
感谢任何帮助。
谢谢!
PS,其中很多都没有记录,并且是经过反复试验后才能弄清楚的 PITA。感谢 Firebug。
你会注意到我是:
- 从网络服务接收 JSON
- 自动完成功能无法原生处理 JSON,因此我必须将其解析为我自己的数组。
- 由于我现在要传回一个自定义数组对象,因此需要覆盖 formatItem 以便处理新的数组对象以用于显示目的。
- 最后是钱,我想在用户选择行(鼠标单击或 TAB 或 ENTER 键)后处理该行上的额外数据。我使用 result() 委托来执行此操作。
我真的希望上面的代码可以帮助其他人在未来弄清楚自动完成器以及它都需要逆向工程。
提示:属性名 data[i].Data 和 data[i].Name 是 JSON 属性名。
【问题讨论】:
标签: jquery json post autocomplete