【发布时间】:2013-09-23 07:47:05
【问题描述】:
我已经将这个发布到typeahead github,但我想也许我可以在这里提问并找到答案。
我正在尝试使用远程查询作为我们的数据源以进行预输入。为此,我想创建一个 POST 并将我的查询参数放入有效负载中。当我在 beforeSend 函数中将 settings.type 设置为 POST 时,它可以工作,但是当我设置 settings.data 时,我没有看到调试器中设置的数据,然后在我的示例中,我使用了一个简单的 http 服务,它返回你的有效载荷,这也验证了数据没有被发送。下面的 typeahead.js 使用 jQuery 1.9.1,特别是使用它的 ajax beforeSend 调用。据我所知,查看 jQuery ajax api 我在 typeahead beforeSend 函数中设置了适当的值。
这是我的代码并在 jsfiddle http://jsfiddle.net/75mCa/2/ 中运行
$('.autocomplete-es .typeahead').typeahead({
name: 'es-tags',
remote: {
url: 'http://httpbin.org/post',
beforeSend: function (jqXhr, settings) {
console.log('type is initially : ' + settings.type);
console.log('data is initially : ' + settings.data);
settings.type = 'POST';
settings.data = { fields: ['tags.tag'], query: { prefix: { tag: 'emp' } } }
//settings.contentType = 'application/json; charset=utf-8';
console.log('type is now : ' + settings.type);
console.log('data is now : ' + settings.data);
//settings.processData = false;
//settings.traditional = true;
return true;
},
filter: function (data) {
console.log(data.data);
console.log(data.data.fields[0]);
//do actual processing...for now just looking for this not to throw an error
// return data.hits.hits[0].fields.tags.tag;
}
}
});
感谢您的帮助, G
【问题讨论】:
-
难道
jqXhr一旦创建就不能从GET更改为POST?如果是这样,为什么不简单地在GET请求中传递查询,并使用replace创建您的 url? -
@NitzanShaked,请求是作为 POST 发送的,所以情况并非如此。尽管可能是无法更改有效负载的情况?然后再从我看到的例子中,它应该是。还用 .ajaxSend() 检查我的更改似乎可以确认事情已按我希望的那样设置。因此,在该点和调用构建和执行之间是我丢失有效负载的地方。哦,不幸的是,带有 url 参数的 GET 对于我的用例来说是不够的。
-
我认为就是这样:您可以将 GET 更改为 POST,但不能更改数据。至少它对我不起作用,而且从文档中看不出你可以。为什么 GET 不够好?
-
我想我可以在 GET 上设置有效负载,只是感觉很脏。无论哪种方式,有效负载的设置都是我的问题,也就是说,我设置了它但它不会发送到服务器。 jQuery api 似乎表明它是一个可变字段。此外,还有其他关于 SO 和其他地方的问题涉及设置有效负载的主题。
-
我的观点不同:如果 GET 适合您,您甚至不必使用
beforeSend。只需使用replace。
标签: javascript jquery typeahead.js