1

您好我刚刚尝试测试错误函数是否会返回警报但它没有触发。我更改了 url 链接,希望它能生成警报,因为它无法找到或获取 json 数据。我得到的只是“未捕获的类型错误:无法读取未定义 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

4 回答 4

1

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

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

$.each函数试图获取其长度data为 NULL。

success您已经定义了一个 jsonp 回调函数,但您仍在使用and回调,这看起来不正确error。这个 SO 问题可能会有所帮助:

使用成功 / jsonpCallback 与 ajax 请求

于 2013-10-24T07:15:30.710 回答
0

也许这里$.each(data.posts,data.posts 是未定义的,这就是你得到错误的原因。登录data成功回调并查看它包含的内容。

于 2013-10-24T07:11:24.430 回答
0

我创建了一个干净的 Fiddle。打开给定的 URL 会给出 301 重定向,然后是 200 JSON 响应。HTTP 状态码表明一切正常,所以 jQuery 不知道有错误。

您在这里混淆了两个不同的概念:jQuery 的错误回调是针对网络错误和所有这些事情的。如果您使用 HTTP 状态代码 200 在 JSON 中传输错误状态,您必须在成功回调中自行处理它。

抱歉,不允许没有代码的 JS-Fiddle 链接:

beforeSend: function()  { console.log('beforeSend'); },
complete: function()    { console.log('complete'); },
success:function (data) { console.log('success') },
error: function(data)   { console.log('error') }
于 2013-10-24T07:20:07.120 回答
0

谢谢各位的意见。我确实接受了所有建议。Jason 的建议似乎更有意义,所以在调查他的建议时,我来到这个网站阅读更多关于 jasonCallback 的信息。删除 jasonCallback 选项虽然没有解决问题,但奇怪的是,这个问题似乎与我用于 json caalback 的 url 有关。

然后我所做的是将网址从“ http://howtodeployit.com/api/get_recent_po ”更改为“ http://howtodeployit.com/category/daily-devotion/feed/?json=recentstories ”并且它起作用了。即使两者都在控制台中返回错误,但第二个是触发错误功能的那个。为什么我要调查它。

于 2013-10-24T08:18:33.860 回答