我正在尝试获取一个JSON,在这里托管在本地服务器上,但由于某种原因它不起作用。如果我在浏览器上点击我的网址,它会正确返回Json,如果我使用其他网址,我会获得一些数据。
我原来的getJson方法:
getJson:
$.getJSON(url,
function(data) {
console.log('got something');
alert(data);
});
现在我想知道到底出了什么问题。我把它重写为Ajax请求,在我的错误回调jqxhr给了我很多我不理解的东西。我可以获得有关此错误的更多详细信息吗?
TextStatus
值为"error"
errorThrown
是null
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
console.log('got something');
alert(data);
},
error: function(jqxhr,textStatus,errorThrown)
{
console.log(jqxhr);
console.log(textStatus);
console.log(errorThrown);
for (key in jqxhr)
alert(key + ":" + jqxhr[key])
for (key2 in textStatus)
alert(key + ":" + textStatus[key])
for (key3 in errorThrown)
alert(key + ":" + errorThrown[key])
//<--- All those logs/alerts, don't say anything helpful, how can I understand what error is going on? ---->
}});
最后,我应该回来的json是
[{"message": "login failed"}]
我不能使用firebug,chrome控制台或任何其他开发工具,因为这是一个使用Phonegap开发的移动应用程序!
答案 0 :(得分:6)
我将把我的评论放在答案表单中,它不是解决问题的方法,但它是解决jQuery Ajax各种返回问题的好方法。
在这种情况下请求某种数据类型dataType: 'json'
时,您正在请求特定类型的数据。如果未返回该特定dataType,则将传递给错误函数。
如果您的错误消息未提供可解释您的问题的信息,请尝试请求更友好的dataType。这样您就可以看到您的请求实际返回的内容。如果您的数据不是您请求的数据类型那么这是您的问题,您可以从那里开始。
html
或text
等数据类型将非常开放,可以为您提供从请求的网址返回的确切数据,您可以从那里解决问题。
希望它有所帮助。
答案 1 :(得分:1)
jqxhr - XrayWrapper
textStatus - 表示Https响应状态的文本表示(例如,成功,错误)
errorThrown - XMLHttpRequest
jqxhr.status - 提供Http响应代码,例如200,404,500等。
使用此代码段打印json对象中的所有键
var output = '';
for (property in object) {
output += property + ': ' + object[property]+'; ';
}
console.log(output);