您好我刚试过测试错误函数是否会返回警报但是它没有触发。我改变了url链接,希望它会生成一个警报,因为它无法找到或获取json数据。我得到的只是“Uncaught TypeError:无法读取未定义的jquery-1.9.1.min.js的属性'长度:3”
$(document).on('pagebeforeshow', '#blogposts', function () {
//$.mobile.showPageLoadingMsg();
$.ajax({
url: "http://howtodeployit.com/api/get_recent_po",
dataType: "json",
jsonpCallback: 'successCallback',
async: true,
beforeSend: function () {
$.mobile.showPageLoadingMsg(true);
},
complete: function () {
$.mobile.hidePageLoadingMsg();
},
success: function (data) {
$.each(data.posts, function (key, val) {
console.log(data.posts);
var result = $('<li/>').append([$("<h3>", {
html: val.title
}), $("<p>", {
html: val.excerpt
})]).wrapInner('<a href="#devotionpost" onclick="showPost(' + val.id + ')"></a>');
$('#postlist').append(result).trigger('create');
return (key !== 4);
});
$("#postlist").listview();
},
error: function (data) {
alert("Data not found");
}
});
});
答案 0 :(得分:1)
我认为问题在于,当您发出AJAX请求时,您的代码正在执行success
回调,而不是error
回调。因此当你执行:
$.each(data.posts, function(key, val) {
$.each
函数试图获得data
的长度为NULL。
您定义了一个jsonp回调函数,但仍然使用success
和error
回调,这看起来并不合适。这个问题可能会有所帮助:
答案 1 :(得分:0)
也许这里$.each(data.posts,
data.posts未定义,这就是你收到错误的原因。在成功回调中记录data
并查看它包含的内容。
答案 2 :(得分:0)
我创建了a clean Fiddle。打开给定的URL会产生301重定向,然后是200 JSON响应。 HTTP状态代码说一切都很好,所以jQuery不知道有错误。
你在这里混淆了两个不同的概念:jQuery的错误回调是针对网络错误和所有这些事情。如果您使用HTTP状态代码200在JSON中传输错误状态,则必须在成功回调中自行处理它。
抱歉,SO不允许没有代码的JS-Fiddle链接:
beforeSend: function() { console.log('beforeSend'); },
complete: function() { console.log('complete'); },
success:function (data) { console.log('success') },
error: function(data) { console.log('error') }
答案 3 :(得分:0)
感谢大家的意见。我确实接受了所有建议。 Jason的建议似乎更有意义,所以在调查他的建议时,我来到site阅读更多关于jasonCallback的内容。删除jasonCallback选项虽然没有解决问题,但奇怪的是这个问题似乎与我用于我的json caalback的url有关。
我接下来要做的是更改#34; http://howtodeployit.com/api/get_recent_po&#34;到&#34; http://howtodeployit.com/category/daily-devotion/feed/?json=recentstories&#34;它起作用了。即使两个都在控制台中返回错误,但第二个是触发错误功能的错误。为什么我要调查它。