Почему делает $ .ajax, призывают к json триггеру данных ошибочный обратный вызов, когда код состояния HTTP “200 хорошо”?

это - определенное поведение? Это - безопасный перекрестный браузер?

Да. И да.

там любое обоснование, базовое, почему это - способ, которым это...

значение this довольно просто вывести:

  1. , Если this используется в функции конструктора, и функция была вызвана с new, ключевое слово, this относится к объекту, который будет создан. this продолжит означать объект даже в открытых методах.
  2. , Если this используется где-нибудь еще, включая вложенный , защитил функции, это относится к глобальной области видимости (который в случае браузера является объектом окна).

второй случай является, очевидно, недостатком дизайна, но довольно легко работать вокруг этого при помощи закрытий.

7
задан kosoant 4 December 2009 в 10:22
поделиться

3 ответа

Проблема может заключаться в том, что данные json, возвращаемые с URL-адреса, имеют неправильный формат. Когда сервер действительно что-то возвращает, код состояния http равен 200. Но это не означает, что данные соответствуют правильному json. Убедитесь, что возвращаемые строковые данные json сформированы правильно.

Я отвечаю на собственное предположение, потому что я усвоил это на собственном горьком опыте. Я не экранировал символ кавычки в моих данных json. Это привело к очень странному поведению. К счастью, двойные кавычки - это практически единственный символ, который нужно экранировать из данных, доставленных через JSON. (Подробнее об этой проблеме: Где я могу найти список управляющих символов, необходимых для моего возвращаемого типа JSON ajax? )

10
ответ дан 6 December 2019 в 23:07
поделиться

Возвращает ли ваш обратный вызов страницу с Content-type: application / json ? Если нет, то это вполне могло быть причиной.

1
ответ дан 6 December 2019 в 23:07
поделиться

Я много тестирую с file: urls вместо использования веб-сервера. В моем коде JSON всегда будет неправильный тип MIME. Чтобы решить эту проблему, я использую следующий код:

$(document).ready(
    function (){

        myData = {};
        $.ajax({
            type: "GET",
            // url: "json.php?fn=jsonData.json",        // with Apache
            url: "jsonData.json",                       // As a file:/// URL
            contentType: "application/json; charset=utf-8",
            data: myData,
            beforeSend: function(x) {
                if(x && x.overrideMimeType) {
                    x.overrideMimeType("application/json; charset=UTF-8");
                }
            },
            dataType: "json",

            success: function(returnData){
                 $("#jsonData").html("Success:"+returnData.tag);
            },
            error: function(returnData) {
                 $("#jsonData").html("Error:"+returnData.tag);
            }
        });
    }
);

Это заставит тип MIME быть правильным для данных JSON.

0
ответ дан 6 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: