jquery Автозаполнение работы со старыми версиями браузеров, но не с новыми? - PullRequest
9 голосов
/ 04 октября 2011

вот данные JSON для моего автозаполнения

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

и код, который я написал:

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

Я использую jquery-ui-1.8.14.autocomplete.Плагин min.js для автоматического завершения проблемы, которую я получаю, состоит в том, что она не показывает все совпадающие результаты в новых браузерах.например, если я наберу "an" , в котором должно совпадать с ключевым словом "anzahl" , пожарная ошибка показывает ошибку, такую ​​как "литерал плохого управляющего символа в строке".результаты показаны для букв "как, са ....".любая помощь будет оценена спасибо

Ответы [ 2 ]

15 голосов
/ 07 октября 2011

Сообщение об ошибке означает, что в вашем ответе JSON есть управляющие символы (что-то вроде \ n, \ t и т. Д.). Новые строки и другие управляющие символы не допускаются в строках JSON, согласно ECMA262 5ed. Вы можете исправить это довольно просто, экранируя или удаляя эти символы, либо из PHP, либо из Javascript.

Здесь вы можете найти пример того, как вы можете исправить это из PHP, так как проблема, скорее всего, связана с json_encode (который, как я полагаю, вы используете): http://codepad.org/Qu7uPt0E Как видите, json_encode не экранирует \ n, поэтому вы должны сделать это вручную перед выводом.

Теперь о тайне, связанной со старыми браузерами. Если вы посмотрите на функцию parseJSON jQuery, то заметите, что она сначала пытается проанализировать строку с помощью встроенного в браузер объекта JSON, а если он не найдет ее, она просто выполнит (вроде) eval (который будет работать даже с строки). Так что это, вероятно, работает для вас на Firefox <3.5 или IE <8, которые не имеют собственного объекта JSON. Кроме того, он, вероятно, работает с другими поисковыми терминами (например, as и т. Д.) Просто потому, что они не содержат результат, содержащий контрольные символы. </p>

0 голосов
/ 13 октября 2011

Добавление к драворам правильного ответа.

Посмотрите на загрузку библиотеки JSON2 https://github.com/douglascrockford/JSON-js Вот как я обошёл эту проблему

...