AJAX с использованием jQuery - синтаксическая ошибка? - PullRequest
5 голосов
/ 02 декабря 2011

Ниже приведен HTML-код, содержащий вызов функции JavaScript, отвечающей за вызов AJAX. Я понимаю, что теги привязки не должны иметь атрибута value, но я использую его с методом jQuery .attr ("value").

<a href="javascript:;" onclick="ajaxTest();" title="Execute AJAX" value="executeAJAX">Execute AJAX</a>

Ниже приведена функция JavaScript. Если он имеет какое-либо значение, он содержится в файле .js сам по себе.

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {"selectedScope": "5",
               "selectedView": "6"},
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

При каждом нажатии на ссылку в веб-консоли Firefox появляется сообщение «Синтаксическая ошибка». Однако, похоже, что JavaScript работает так, как задумано.

Я просто хочу понять, почему я получаю ошибку.

Я должен добавить, что я использую jQuery 1.7.1.

Я выполнил поиск, и единственное решение, которое я нашел, заключалось в том, что ключи для параметра «данные» должны быть заключены в двойные кавычки, поэтому я реализовал это, но я все еще получаю синтаксис.

Спасибо.

EDIT:

Глядя на консоль Firebug, приведенный выше код не вызывает ошибка, как это было в консоли Firefox, однако, я увидел следующее в XML-части POST-запроса:

Ошибка синтаксического анализа XML: синтаксическая ошибка Расположение: moz-nullprincipal: {1d13df07-25fb-4058-9f82-ce1bef3c8949} номер строки 1, столбец 1:
alskdfjlaksjdfjasdfl
^

"alskdfjlaksjdfjasdfl" - это просто то, что я настроил, чтобы мой сервлет возвращался при тестировании этого материала.

Это немного странно, потому что похоже, что jQuery пытается разобрать ответ в виде XML, хотя я явно указал, что это текст.

Ответы [ 6 ]

13 голосов
/ 25 июня 2015

Я недавно столкнулся с той же проблемой. Казалось, что jQuery правильно обрабатывает данные и dataType, но вместо этого Firefox возвращает синтаксическую ошибку, которая объясняет, почему ваш код выполнялся так, как задумано, но все еще выводит ошибку на консоль.

Если вы посмотрите в консоль разработчика, вы увидите, что Firefox интерпретирует данные в виде простого текста как другой формат (вероятно, XML). Firefox устает анализировать данные как XML, но не может, потому что это недопустимый XML, что приводит к выводу «Синтаксическая ошибка» на консоль.

Решением этой проблемы для меня было редактирование сервера, поэтому он вернул следующий заголовок:

Content-Type: "text/plain"

Это только проблема Firefox, Chrome не сталкивался с этой проблемой. Здесь ошибка Firefox , которая, кажется, затрагивает проблему.

8 голосов
/ 02 декабря 2011
function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {"selectedScope": "5",
               "selectedView": "6"          <---- here (drop comma, add bracket)
               },
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}
2 голосов
/ 02 декабря 2011
function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {
            "selectedScope": "5",
            "selectedView": "6"
        }, // <-- need closing curly brace and comma
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

EDIT

У меня все работает здесь, на jsFiddle .

Дополнительно попробуйте изменить

<a href="javascript:;" ... 

до

<a href="javascript:void();"...`

РЕДАКТИРОВАТЬ 2

У меня это тоже работает альтернативным способом. (с использованием Firefox 8.0.1 и Jquery 1.7.1)

Смотрите это в действии здесь.

2 голосов
/ 02 декабря 2011

Это ваш объект данных, который является проблемой, вы пропускаете конечный код}

Редактировать:

Не уверен, если это проблема, но я думаю, что выможете пропустить кавычки вокруг ваших ключей в объекте данных (и вокруг значений, а также, если вы собираетесь отправлять только цифры, оставьте их, например, если вы собираетесь отправлять строки):

Редактировать 2:

Согласно документации jQuery , .append () ожидает элемент DOM, строку HTML или объект jQuery.Таким образом, я создал текстовый узел DOM вашего ответа и добавил его вместо текстовой строки.Обратите внимание, что редактирование не проверено .

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {
           selectedScope: 5,
           selectedView: 6
        },
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(document.createTextNode(responseData));
        }
    });
}
1 голос
/ 02 декабря 2011

Это потому, что вы забыли поставить } для параметра data. Попробуйте это:

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {"selectedScope": "5",
               "selectedView": "6"},
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

Одна рекомендация: при возникновении подобных проблем. Используйте Сервис Google Closure Compiler . Он точно скажет вам, где ваша проблема. Или Firebug , если вы используете Firefox.

0 голосов
/ 02 апреля 2013
function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        dataType: "html",
        data:{
               "selectedScope": "5",
               "selectedView": "6"
         },
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...