2012-10-04 38 views
5

Estoy tratando de implementar una forma de autocompletar HTML con Solr y jQuery UI.Solr jQuery Autocompletar no autocompletar

servidor de Solr ingrese la consulta y Firebug confirman que recibo una matriz 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"]}, ...]}}} 

Pero este código no muestra la respuesta:

<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> 

Gracias por la ayuda

+0

¿qué data.response.docs [i] .query refiere? ¿Debería ser data.response.docs [i] .defaultCommonNameString en su lugar? –

+0

sí, es data.response.docs [i] .defaultCommonNameString pero no cambia el resultado :-( – doumeasse38

+0

intente esto: dataType: "jsonp"; también minLength: 2 podría ser más eficiente, pero eso depende de sus requisitos –

Respuesta

1

estoy usando por encima de su código IP y el puerto del servidor de trabajo bien, pero está abierto directamente en la fuente de la página ¿hay alguna manera de cifrar esta información.

+0

Se puede utilizar proxy de Apache para redirigir la solicitud a continuación, basta con utilizar el URL actual para redirigir:.. var url = window.location.protocol + '//' + window.location.host; ... $ ajax ({ url: url + '/solr/.../select', ... – doumeasse38

6

Muchas gracias D_K, que está muy bien el trabajo !!!

El código:

$(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 
     }); 
    });