JQuery не обрабатывает JSON-ответ от AJAX POST - PullRequest
4 голосов
/ 27 июля 2011

Обновлено: Я публикую данные HTML FORM, но ожидаю получения данных JSON. Я не пытаюсь отправить данные JSON.

Я пытаюсь получить ответ JSON от выполнения запроса POST HTML FORM. Я успешно получил обратно JSON при использовании простого запроса POST HTML FORM (т.е. не AJAX). Мой JSON-ответ от HTML POST FORM выглядит так:

{"success":true,"data":1234567}

Проблема возникает, когда я пытаюсь обработать запрос и ответ с помощью .ajax () jQuery.

$.ajax({
    type: "POST",
    url: URL,
    data: data1,
    dataType: "json",
    success: function(data, textStatus, jqXHR) {
        alert ("success");
    },
    error: function(xhr, status, error) {
        alert ("Error: " + error);
    }
});

После запуска приведенного выше кода и отладки в Firebug, похоже, что запрос POST выполняется, но что-то идет не так при обработке ответа. Firebug сообщает мне следующее относительно ответа HTTP на запрос POST:

Response Headers
Cache-Control   private
Content-Length  31
Content-Type    application/json; charset=utf-8
...

Похоже, что отправляется 31 байт данных. Однако при отладке реального Javascript вызывается функция error и объект xhr выглядит так:

Object { readyState=0, status=0, statusText="error"}

Я знаю, что в документе jQuery.ajax () говорится, что «в jQuery 1.4 данные JSON анализируются строго; любой искаженный JSON отклоняется и выдается ошибка синтаксического анализа». Однако я считаю, что мой JSON действителен, поскольку я проверил его на jsonlint.com.

Что еще может пойти не так?

Ответы [ 3 ]

1 голос
/ 27 июля 2011

Мне кажется, что вы получаете ошибку сервера. Я бы проверил код состояния ответа и исправил бы то, что вызывает сбой запроса на сервере.

0 голосов
/ 25 июня 2012

У меня была такая же проблема. Похоже, что это проблема кросс-домена.

Нахождение этого SO ответа: https://stackoverflow.com/a/7605563/154513

помог мне.

0 голосов
/ 27 июля 2011

вы получаете ошибку, потому что data1 не отформатирован в json, поэтому, когда он получает данные, он получает ошибку разбора. данные1 должны быть отформатированы:

data1={"apikey":apikey,
        "firstname":fName
      }
...