2012-10-04 120 views
5

我試圖用Solr和JQuery UI實現HTML自動完成表單。Solr JQuery自動完成不自動完成

Solr的服務器日誌查詢和Firebug的確認,我得到一個JSON數組:

{"responseHeader":{"status":0,"QTime":3,"params":{"fl":"defaultCommonNameString","q":"defaultCommonName:angle","wt":"json"}},"response":{"numFound":42,"start":0,"docs":[{"defaultCommonNameString":["angle"]},{"defaultCommonNameString":["reporter un angle"]},{"defaultCommonNameString":["formule pour un angle"]},{"defaultCommonNameString":["angle droit"]},{"defaultCommonNameString":["angle au centre"]}, ...]}}} 

但是這個代碼不顯示響應:

<link rel="stylesheet" type="text/css" href="css/demos.css" /> 
<script type="text/javascript" src="jquery/jquery-1.8.2.min.js"></script> 
<script type="text/javascript" src="jquery/jquery.ui.core.js"></script> 
<script type="text/javascript" src="jquery/jquery.ui.widget.js"></script> 
<script type="text/javascript" src="jquery/jquery.ui.position.js"></script> 
<script type="text/javascript" src="jquery/jquery.ui.autocomplete.js"></script> 
<script> 
$(function() { 
    $("#autosearch").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
      url: "http://localhost:8080/solr/select", 
      data: { 
       q: "defaultCommonName:"+request.term, 
     wt:"json", 
     fl: "defaultCommonNameString", 
      }, 
      dataType: "json", 
      type: "GET", 

      success: function(data) { 
       data=parse(); 
       function parse(){ 
       var parsedQueries=[]; 
        for(var i=0;i<data.response.docs.length;i++){ 
         parsedQueries[i]=data.response.docs[i].Query; 
        } 
        return parsedQueries; 
       } 

       response($.map(data.response.docs, function(item) { 
        return { 
         label: item, 
         value: item 
        }; 
      })); 
      } 
      }); 
     }, 
     minLength: 1 
     }); 
    }); 
</SCRIPT> 
</head> 
<body> 
<label for="autosearch">Search Here : </label> 
<input id="autosearch"/> 
</body> 

感謝您的幫助

+0

data.response.docs [i] .Query指的是什麼?應該改爲data.response.docs [i] .defaultCommonNameString? –

+0

是的,它是data.response.docs [i] .defaultCommonNameString,但它不會改變結果:-( – doumeasse38

+0

試試這個:dataType:「jsonp」;也minLength:2可能會更有效率,但這取決於您的要求 –

回答

1

我使用上面的代碼其工作正常,但服務器的IP和端口直接在網頁源代碼開放是有什麼辦法可以此信息進行加密。

+0

您可以使用Apache代理重定向請求 然後簡單地使用當前的URL重定向:。 VAR URL = window.location.protocol + '//' + window.location.host; ... $阿賈克斯({url:url +'/solr/.../select', ... – doumeasse38

6

非常感謝D_K,這很好!

代碼:

$(function() { 
    $("#autosearch").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
      url: "http://localhost:8080/solr/select", 
      data: { 
       q: "defaultCommonName:"+request.term, 
       fl: "defaultCommonNameString", 
       wt: 'json', 
      }, 
      dataType: "jsonp", 
      jsonp: 'json.wrf', 

      success: function(data) { 
       response($.map(data.response.docs, function(item) { 
        return { 
         label: item.defaultCommonNameString, 
         value: item.defaultCommonNameString, 
        }; 
      })); 
      } 
      }); 
     }, 
     minLength: 1 
     }); 
    });