【问题标题】:The error function not working错误功能不起作用
【发布时间】:2013-11-02 18:22:17
【问题描述】:

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

    });
});

【问题讨论】:

  • 异步:true,默认。
  • afaik $.ajax 只会在请求失败时触发错误,忽略返回的数据。但我不确定这一点。在你的 api 方法中抛出一个未捕获的异常,看看你的 javascript 是如何反应的

标签: javascript jquery


【解决方案1】:

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

【讨论】:

  • 我认为这是 OP 的重点。如果 URL 返回 404,则不应调用成功回调。
  • 我会假设 RGraham 提到过
  • @Chelseawillrecover 试试我说的))
  • @karaxuna 你想让我做什么改变?
  • @Chelseawillrecover 您可以检查data.posts 是否未定义:if(data.posts) $.each(data.posts, ...。但我建议查看数据对象的结构,也许 data.posts 从未定义,data 变量本身包含帖子
【解决方案2】:

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

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

$.each 函数正在尝试获取 data 的长度,即 NULL。

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

Use of success / jsonpCallback with ajax request

【讨论】:

    【解决方案3】:

    我创建了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') }
    

    【讨论】:

    • 对不起,应该先点击保存;)。已更新。
    • beforeSend myscript.js:11 错误 myscript.js:14 完成 myscript.js:12 GET howtodeployitsdf.com/api/get_recent_po
    • 小提琴显示了对不存在的 URL 的请求,并且错误事件被正确触发(至少它对我有用,不知道那里是否有问题)。但是,在您的示例中并非如此,因为您的响应发送了 200 标头。所以 jQuery 不会触发错误事件。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多