错误功能无效

时间:2013-10-24 07:09:20

标签: javascript jquery

您好我刚试过测试错误函数是否会返回警报但是它没有触发。我改变了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");
        }

    });
});

4 个答案:

答案 0 :(得分:1)

我认为问题在于,当您发出AJAX请求时,您的代码正在执行success回调,而不是error回调。因此当你执行:

$.each(data.posts, function(key, val) {

$.each函数试图获得data的长度为NULL。

您定义了一个jsonp回调函数,但仍然使用successerror回调,这看起来并不合适。这个问题可能会有所帮助:

Use of success / jsonpCallback with ajax request

答案 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;它起作用了。即使两个都在控制台中返回错误,但第二个是触发错误功能的错误。为什么我要调查它。