提前输入.js远程发送之前发送帖子数据问题

typeahead.js remote beforesend post data issue

本文关键字:数据 问题 输入 js 程发送      更新时间:2023-09-26

我已经把它发布到typeahead github上了,但我想也许我可以在这里问并找到答案。

我正在尝试使用远程查询作为我们的数据源进行预键入。 为此,我想创建一个 POST 并将我的查询参数放在有效负载中。 当我在 beforeSend 函数中将 settings.type 设置为 POST 时,它可以工作,但是当我设置 settings.data 时,我没有看到调试器中设置的数据,然后在我的示例中,我使用一个简单的 http 服务返回您的有效负载,这也验证了数据未被发送。 在typeahead下面.js使用jQuery 1.9.1,特别是使用它的ajax beforeSend call。 据我所知,查看jQuery ajax api,我正在发送函数之前的typeahead中设置适当的值。

这是我的代码,并在 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

我有完全相同的用例(将typehead.js与elasticsearch集成),并遇到了同样的问题。问题最终是jquery中检查您是否有要POST的表单数据的代码行是:

xhr.send( ( s.hasContent && s.data ) || null );

。因此,只需继续s.hasContent=true beforeSend,一切正常。