2011-10-04 21 views
9

Estos son los datos JSON para mi auto completojquery Autocompletar trabajando con versiones anteriores de los navegadores pero no con las nuevas?

{ "list" : [ { 
    "genericIndicatorId" : 100, 
    "isActive" : false, 
    "maxValue" : null, 
    "minValue" : null, 
    "modificationDate" : 1283904000000, 
    "monotone" : 1, 
    "name":"Abbau", 
    "old_name" : "abbau_change_delete_imac", 
    "position" : 2, 
    "systemGraphics" : "000000", 
    "unitId" : 1, 
    "valueType" : 1, 
    "description" : "Abbau", 
    "weight" : 1 
}]} 

y el código que escribí es

$("#<portlet:namespace />giName").autocomplete({ 
      source :`enter code here` function(request, response) { 
       $.post(
        "<%=AJAXgetGIs%>", 
        { 
         "<%=Constants.INDICATOR_NAME%>" : request.term, 
         "<%=Constants.SERVICE_ID%>" : <%=serviceId%> 
        }, 
        function(data) { 
         response($.map(data.list, function(item) { 
           //alert(item.name + " || " + item.genericIndicatorId); 
           item.value = item.name; 
          return item; 
         })); 
        }, 
        "json" 
       ); 
      }, 
      minLength : 2 

estoy usando plugin de jQuery-UI-1.8.14.autocomplete.min.js de auto complete el problema que estoy recibiendo es que no muestra todos los resultados coincidentes en nuevos navegadores. por ejemplo, si el tipo i "un" en el que deberían partidos a la "anzahl" palabra clave , sobre el insecto está mostrando error como "mal carácter de control literal en una cadena". los resultados se muestran para las letras "as, sa ....". cualquier ayuda se aplicaría gracias

+1

Si se está trabajando muy bien para otras combinaciones como '' y 'sa', sugeriría mirar cuidadosamente las diferencias en su respuesta JSON en comparación con 'an'. Puede ver la respuesta en Chrome presionando Ctrl + Shift + I y seleccionando la pestaña 'Red'. Luego, a medida que su código ejecuta el script, puede ver la respuesta. – Luke

+0

@Luke Coulton está dando la respuesta no: 200 como para otros también pero no muestra los resultados en la lista desplegable. – user964147

+1

Compruebe el 'json' real que se devuelve para cada respuesta. Hay una pestaña 'json' dentro del área de red de las herramientas de desarrollo de Chrome. – Luke

Respuesta

15

El mensaje de error significa que tiene caracteres de control en su respuesta JSON (algo así como \ n, \ t, etc.). Las líneas nuevas y los otros caracteres de control no están permitidos en cadenas JSON, de acuerdo con ECMA262 5ed. Puede solucionarlo fácilmente escapando o eliminando esos caracteres, ya sea de PHP o de Javascript.

Aquí puede encontrar un ejemplo de cómo se puede arreglar desde PHP, como el problema más probable es que proviene de json_encode (que supongo que está utilizando): http://codepad.org/Qu7uPt0E Como se puede ver, json_encode no escapa a la \ n por lo que debe hacerlo manualmente antes de imprimir.

Ahora para el misterio relacionado con los navegadores más antiguos. Si nos fijamos en la función parseJSON de jQuery, notará que primero intenta analizar la cadena con el objeto JSON incorporado del navegador y, si no encuentra ninguno, solo hará una (tipo de evaluación) (que funcionará incluso con nuevas líneas). Por lo tanto, probablemente funcione para usted en Firefox < 3.5 o IE < 8 que no tengan un objeto JSON nativo. Además, probablemente funcione con otros términos de búsqueda (como as, etc.) simplemente porque no incluyen un resultado que tenga caracteres de control.

Cuestiones relacionadas