1

これはすでに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

4

1 に答える 1

3

私はこれとまったく同じユースケース(typehead.jsをelasticsearchと統合)を持っており、同じ問題に遭遇しました。問題は、POST するフォーム データがあるかどうかをチェックしている jquery のコード行が次のようになっていることです。

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

...そして、先に進んで設定するだけs.hasContent=truebeforeSend、すべてが機能します。

于 2013-09-26T13:39:48.583 に答える