2011-10-04 18 views
9

tutaj jest dane JSON do mojego auto kompletneAutouzupełnianie jquery działa ze starszymi wersjami przeglądarek, ale nie nowe?

{ "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 
}]} 

i kod, który napisałem jest

$("#<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 

Używam plugin jquery-ui-1.8.14.autocomplete.min.js dla auto complete Problem pojawia się, ponieważ nie pokazuje wszystkich dopasowanych wyników w nowych przeglądarkach. na przykład gdy wpisuję „an”, w którym powinien pasuje do „Anzahl” hasła , błąd ogień pokazuje błąd jak „złego charakteru kontrolnego w dosłownym ciąg”. wyniki są wyświetlane dla liter "as, sa ....". każda pomoc byłaby przydatna dziękuję

+1

Jeśli to działa dobrze dla innych kombinacji „jako” i „sa”, bym Proponuję uważnie patrząc na różnice w twoja odpowiedź JSON w porównaniu do "an". Możesz wyświetlić odpowiedź w Chrome, naciskając Ctrl + Shift + I i wybierając zakładkę "Sieć". Następnie, gdy twój kod uruchamia skrypt, możesz zobaczyć odpowiedź. – Luke

+0

@Luke Coulton daje odpowiedź nr: 200 jak dla innych, ale nie pokazuje wyników z rozwijanej listy. – user964147

+1

Sprawdź rzeczywiste "json", które jest zwracane dla każdej odpowiedzi. W obszarze Sieć narzędzi Chrome dla programistów znajduje się karta "json". – Luke

Odpowiedz

15

Komunikat o błędzie oznacza, że ​​masz znaki kontrolne w odpowiedzi na JSON (coś w stylu \ n, \ t, itp.). Newlines i inne znaki kontrolne nie są dozwolone w łańcuchach JSON, zgodnie z ECMA262 5ed. Możesz to naprawić raczej łatwo, uciekając lub usuwając te znaki, z PHP lub z Javascript.

Tutaj można znaleźć przykład, jak można naprawić z PHP, jak problem najprawdopodobniej pochodzi z json_encode (które zakładam, że używasz): http://codepad.org/Qu7uPt0E Jak widać, json_encode nie uciec \ n więc musisz zrobić to ręcznie przed wyprowadzeniem.

Teraz tajemnica związana ze starszymi przeglądarkami. Jeśli spojrzysz na funkcję parseJSON jQuery, zauważysz, że najpierw próbuje sparsować ciąg za pomocą wbudowanego w przeglądarce obiektu JSON, a jeśli go nie znajdzie, to po prostu zrobi (rodzaj) eval (która zadziała nawet z newlines). Prawdopodobnie działa dla ciebie na Firefox < 8, które nie mają natywnego obiektu JSON. Prawdopodobnie działa również z innymi wyszukiwanymi terminami (np. Jako itp.), Ponieważ nie zawierają wyniku zawierającego znaki kontrolne.

Powiązane problemy