2011-11-29 21 views
0

オートコンプリートプラグインに問題があります。jquery pluginオートコンプリート - 結果が表示されない

var autocomplete = { 
     cache: {}, 
     xhr: {} 
    }; 

    $('#header .search input[type="text"]').autocomplete({ 
     minLength : 2, 
     source: function (request,response) { 
     var q = request.term; 
     if(q in autocomplete.cache) { 
      response(autocomplete.cache[q]); 
      return false; 
     } else { 
      autocomplete.hxr = $.getJSON("/search/autocomplete/nous?ajax=1&q="+q,function(data, status, xhr) { 
      autocomplete.cache[q] = data; 
      //if(autocomplete.xhr === xhr) { 
       response(data); 
      //} 
     }); 
     return true; 
     } 
     } 
    }); 

私は入力に何かを書いている(「こんにちは」この場合には)、私はそのは、JSON配列を返すWeb開発者ツールで見ることができます:ここに私のコードです。したがって、要求が完了したときに有効な応答が得られます。

0: "hello kitty" 
1: "hello dolly and frieda" 
2: "hello ass" 
3: "hello there" 
4: "hello do you make" 

ajaxリクエストを実行していますが、結果がプルダウンメニューにプッシュされていないため、空です。どんな助けもありがとう!

ありがとうございます!

+0

これは誤植ですか? 'autocomplete.hxr' –

+0

ソース関数内でtrueまたはfalseを返す目的は何ですか?これは文書化されていないようです。 –

+0

私は実際に他の人のコードをデバッグしようとしています。その人はここにいなくなりました...しかし、冗長な要求を避けるためにキャッシュを実装するのです。 – Lelly

答えて

1

この答えは、コメントに基づいています。

これはあなたが延期オブジェクトを使用して同じ目標を達成できるかです:

var autocomplete = { 
    cache: {} 
}; 

$('#header .search input[type="text"]').autocomplete({ 
    minLength: 2, 
    source: function(request, response) { 
     var q = request.term; 
     if (!autocomplete.cache[q]) { 
      autocomplete.cache[q] = $.getJSON("/search/autocomplete/nous?ajax=1&q=" + q); 
     } 
     autocomplete.cache[q].done(response).fail(function(x,y,z){ 
      alert(x.responseText + "\n-----\n" + y + "\n" + z); 
     });  
    } 
}); 

編集:元のコードが動作しない理由のように見えますタイプミスが原因でした。

Edit2:フェールハンドラを追加

+0

タイプミスが問題を解決しなかったようです。私は同じ結果を得ています。空のドロップダウン。私はあなたのコードも同じ結果を試しました。他の考え? – Lelly

+0

変更を加えて自分のコードを試してください。アラートは発生しますか? –

+0

ええええええええええええええええええええええええええええええええええええええええええええええええ –

関連する問題