У меня есть функция, которая вызывает другую функцию над сервером и возвращает строку, которую я хочу напечатать в окнах журнала браузера. Функция выглядит так:
function getErrorInfo() {
setTimeout(function () {
$.getJSON('Get/ErrorInfo', function (responseText) {
console.log("Log: "+responseText);
});
}, 5000);
}
getErrorInfo();
Функция со стороны сервера делает обратные удары и возвращает допустимую строку. Но ничего не отображается в окнах браузера. Кроме того, функция на стороне сервера должна быть удалена через каждые 5 секунд. но он только получает его вовремя, а не снова.
Пожалуйста, объясните, что я делаю неправильно здесь.
При использовании $.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();
На мой взгляд, в этой ситуации он лучше, чем setInterval()
, поскольку он может получить резервную копию и завершить отмену вызовов, а ошибки могут отображаться не в порядке.
Ваша основная проблема заключается в том, что вам нужно правильно отформатировать 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);
По крайней мере, в хроме, консольное окно позволит вам просматривать содержимое объекта, что может быть действительно полезно. Между запиской и решением выше, я думаю, вы должны иметь это. Удачи!
responseText
, который является текстовой строкой (см. Комментарий ко второму до последнего). console.log('LOG:', responseText)
будет работать (обратите внимание ,
вместо конкатенации).
responseText
. Он получает удар только один раз, потому что вы, кажется, вызываете его только один раз (зачем он запускается снова?). Вместо этого вы можетеgetErrorInfo()
setInterval()
, но я предпочитаю снова вызыватьsetTimeout()
(здесь вы можете просто снова вызватьgetErrorInfo()
после вызоваconsole.log
). ВызовsetTimeout
снова предотвращает суммирование вызовов.