我有一个函数调用服务器上的另一个函数并返回一个我希望在浏览器的日志窗口中打印的字符串,该函数如下所示:
function getErrorInfo() {
setTimeout(function () {
$.getJSON('Get/ErrorInfo', function (responseText) {
console.log("Log: "+responseText);
});
}, 5000);
}
getErrorInfo();
服务器端的功能确实获得命中并返回一个有效的字符串但是浏览器的窗口中没有显示任何内容此外,服务器端的功能必须在每5秒后被命中。但它只能准时而不是再次。
请解释我在这里做错了什么。
答案 0 :(得分: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格式完全described here。我建议首先从服务器获取一个静态JSON文件,而不是调用真正的服务。然后你知道数据是正确的。
旁注:
这里的另一个问题是如何从getJSON
打印OBJECT结果。当您尝试使用“Console.log”打印对象时,它会将其转换为字符串,这可能不会显示您想要的内容。您应该将日志语句更改为:
console.log(responseText);
至少在chrome中,控制台窗口将允许您浏览对象的内容,这些内容非常有用。在上面的注释和解决方案之间,我认为你应该拥有它。祝你好运!
答案 1 :(得分:0)
使用$.getJSON()
时,返回结果必须是有效的JSON
字符串,这意味着它需要可解析为对象或数组。在这种情况下,您可以简单地使用$.get()
,它将自动检测返回数据类型,或者如果您想跳过JSON要求,请使用$.ajax()
并设置dataType: plain
。
关于保持日志运行的第二个问题,您可以从getErrorInfo()
或回调中调用setTimeout()
,它将继续运行:
function getErrorInfo() {
setTimeout(function () {
$.getJSON('/echo/json/', function (responseText) {
console.log("Log: "+responseText);
getErrorInfo();
});
}, 5000);
}
getErrorInfo();
在我看来,在这种情况下,它优于setInterval()
,因为它可以备份并最终覆盖调用,并且错误可能无序显示。