console.log не печатает ответ

0

У меня есть функция, которая вызывает другую функцию над сервером и возвращает строку, которую я хочу напечатать в окнах журнала браузера. Функция выглядит так:

function getErrorInfo() {
    setTimeout(function () {
        $.getJSON('Get/ErrorInfo', function (responseText) {
            console.log("Log: "+responseText);
        });
    }, 5000);
}
getErrorInfo();

Функция со стороны сервера делает обратные удары и возвращает допустимую строку. Но ничего не отображается в окнах браузера. Кроме того, функция на стороне сервера должна быть удалена через каждые 5 секунд. но он только получает его вовремя, а не снова.

Пожалуйста, объясните, что я делаю неправильно здесь.

  • 2
    Что говорит сетевой инспектор по запросу?
  • 0
    Вам нужно проверить вкладку сети в консоли и / или установить точку останова в скрипте, чтобы проверить, что такое responseText . Он получает удар только один раз, потому что вы, кажется, вызываете его только один раз (зачем он запускается снова?). Вместо этого вы можете getErrorInfo() setInterval() , но я предпочитаю снова вызывать setTimeout() (здесь вы можете просто снова вызвать getErrorInfo() после вызова console.log ). Вызов setTimeout снова предотвращает суммирование вызовов.
Показать ещё 13 комментариев
Теги:
asp.net-mvc-4

2 ответа

0
Лучший ответ

При использовании $.getJSON() возвращаемый результат должен быть допустимой строкой JSON, что означает, что она должна быть подвержена анализу в объект или массив. В этой ситуации вы, вероятно, можете просто использовать $.get(), который будет автоматически определять тип возвращаемых данных или использовать $.ajax() и установить dataType: plain если вы хотите пропустить требование JSON.

Во втором вопросе сохранения работы журнала вы можете вызвать getErrorInfo() изнутри setTimeout() или обратного вызова, и он будет продолжать работать:

function getErrorInfo() {
    setTimeout(function () {
        $.getJSON('/echo/json/', function (responseText) {
            console.log("Log: "+responseText);

            getErrorInfo();
        });
    }, 5000);
}
getErrorInfo();

http://jsfiddle.net/Er5Lg/

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

1

Ваша основная проблема заключается в том, что вам нужно правильно отформатировать JSON, чтобы получить результат. Ваш результат (согласно выше):

3/8/2014 5:27:16 PMSystem.NullReferenceException: Object reference not set to an instance of an object. at movie.Models.Genre.GetPosts(Int32 min)

Это не только текст исключения, но и недействительный JSON. Формат JSON полностью описан здесь. Вместо того, чтобы называть реальный сервис, я бы рекомендовал начать с простого статического файла JSON с сервера. Тогда вы знаете, что данные верны.

Side Note: Другая проблема заключается в том, как вы печатаете результат OBJECT от getJSON. Когда вы пытаетесь распечатать объект с помощью "Console.log", он преобразует его в строку, которая, вероятно, не покажет, что вы хотите. Вероятно, вы должны изменить свой оператор журнала:

console.log(responseText);

По крайней мере, в хроме, консольное окно позволит вам просматривать содержимое объекта, что может быть действительно полезно. Между запиской и решением выше, я думаю, вы должны иметь это. Удачи!

  • 0
    Я думаю, что вы, возможно, путаете мой jsfiddle с OPT responseText , который является текстовой строкой (см. Комментарий ко второму до последнего). console.log('LOG:', responseText) будет работать (обратите внимание , вместо конкатенации).
  • 0
    @JaredFarrish Вы правы! Я обновился и не заметил, что ОП не публикует ссылку. Проблема только в плохо отформатированном JSON. Я исправлю свой результат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню