2017-04-15 14 views
0

私は現在、単純なjQueryオートコンプリートUIを作成しようとしています。検索用語はPHPバックエンドに返され、戻る結果。これはうまく動作します。ただし、3〜4の空白を入力すると、要求も送信され、バックエンドのすべての結果が返されます。どのような用語が入力されたとしても、バックエンドに行くはずの検索語は先頭と末尾の空白を切り捨て、空白の文字列であれば何も要求しないようにトリミングした後にjQueryオートコンプリートを構成する全く?jQueryは、リモートURLへのリクエストの送信中に先頭と末尾の空白を無視します

私はSOでの複数の例を見つけましたが、それらのすべては、一例として、用語の組み込みの配列を伴う、私はその値がリモートURLの場合はsourceパラメータを設定する方法を見つけ出すことはできません。

$("#myinput").autocomplete({ 
     source: "http://127.0.0.1:8000/autoComplete/", 
     appendTo: "#search-holder", 
     response: function(e,y) {} 
}); 

答えて

1

この1のための簡単な答えはありません。 searchイベントでは、用語の上書きが許可されていると思っていましたが、そうではありません。 Nagarajuの答えは正しい、彼は実際の実装を示していませんでした。これはどのように見えるのですか

$("#myinput").autocomplete({ 
    source : function(request, response){ 
     //trim the input value 
     request.term = request.term.trim(); 
     if(request.term == ""){ 
      //when empty, returns empty result 
      response([]); 
     }else{ 
      //our own implementation of request to the server 
      $.get("http://127.0.0.1:8000/autoComplete/?term=" + request.term, 
      function(data) { 
       response(data); 
      }); 
     } 
    } 
}); 
+0

ありがとうございます。ここでは 'response'関数は何ですか? – SexyBeast

+0

リクエストが完了したことをオートコンプリートに通知するコールバックです – xar

+0

チャームのように動作します!ありがとう! – SexyBeast

-1

trim()を使用して、文字列の最後と先頭から空白を削除しますか? https://api.jquery.com/jQuery.trim/

または、バックエンドで実行できます。 http://php.net/manual/en/function.trim.php

編集:あなたはページをロードし、配列に格納する際 理由だけではなく、AJAX呼び出しで使用可能なすべての自動補完の一回取得していません。この方法では、DBは、入力フィールドに変更があるたびに読み込まれる代わりに、ページが読み込まれるときに一度だけ悩まされます。また、これはDBの作業負荷がかかり、空白が問題にならないでしょう。

+0

私はテキストをトリミングする方法を知っています、問題は、トリミングされたテキストが長さがゼロの場合、要求を一切送信しないとjQueryに伝える方法ですか? – SexyBeast

+0

はい、私はバックエンドで行うことができます。つまり、要求は既に行われています。検索用語が空白だけである場合、私は要求を送信したくない。 – SexyBeast

+0

1000万を超える結果が出ます。フロントエンドでそれらをキャッシュすることは、ユーザーの記憶にとってひどいことになります。 – SexyBeast

1

は、以下の通りごsource機能を更新します。

source: function(request, response) { 
     //Remove spaces 
     var matcher = new RegExp($.trim(request.term).replace(/ +/g, ""), "i"); 
     response($.grep(resources, function(value) { 
     return matcher.test(value); 
     })); 
    } 
+0

どこにリモートURLについて言及しましたか? – SexyBeast

+0

http://stackoverflow.com/a/4041382/1848140 @SexyBeastはその助けをしていますか? – Nagaraju

+0

レスポンスコードで@SexyBeast resorucesにはリモートリソースが含まれています。 – Nagaraju

関連する問題