【问题标题】:get statusCode inside jQuery load event handler在 jQuery 加载事件处理程序中获取 statusCode
【发布时间】:2014-10-10 08:27:52
【问题描述】:

我正在使用 jQuery ajax 事件“加载”:

标记代码:

<iframe id="my_iframe" src="http://somewhere"></iframe>

jQuery 代码:

$(function() {
    $('#my_frame').load(function(statusCode) {
        // The content loaded here maybe 404/500 or other.
        if(statusCode == 400) {
            // do something.
        } else {
            // do something else.
        }
    });
});

问题

我想在我的加载事件回调中获取状态代码。也许得到jqXHR 对象来实现?

这可能吗?


另外,我可能手动更改iframe的src属性,也会触发load事件,看来这不是ajax调用。

【问题讨论】:

  • 你只有一个回调没有loading-url,你在加载什么?,如果在回调参数中定义,你也可以使用XHR-object。
  • @AdrianForsius 能否请您指出一个更具体的方法,说明如何将 XHR 对象作为参数放入回调?

标签: jquery ajax http-status-codes


【解决方案1】:

首先,使用iframes 通常不是最佳实践。只需使用 &lt;div&gt; 元素,您应该能够满足所有要求。

HTML:

<div id="dynamicPage">
    Loading...
</div>

JavaScript:

$("#dynamicPage").load(
"http://somewhere",
function(response, status, xhr) {
    if (status == "success") {
        // SUCCESSFUL request //

    } else if (status == "error" || status == "timeout") {
        // ERROR and TIMEOUT request //

        var msg = "Sorry! An error has occurred. Please try again later";
        $("#dynamicPage").html(msg);

    } else if (status == "notmodified") {
        // NOT MODIFIED request (likely cached) //

    } else if (status == "abort") {
        // ABORTED request //

    }
});

仔细阅读有关此问题的其他一些建议。另一个帖子甚至没有使用jQuery.load(),并将“success:”拼错为“sucess.

作为奖励(如果您可能感兴趣的话),您可以轻松修改上面的代码以利用加载动画。

参考: Basic jQuery animation: Elipsis (three sequential dots)

【讨论】:

    【解决方案2】:

    我会说你正在寻找这样的东西:

    $.get({
        'url': 'your-url',
        sucess: function(response, status, xhr) {
            //do something
    
            //Change the iframe content by src while having xhr availible
            $('#my_frame').attr('src', 'new-url');
            //Change the iframe content by appending your own HTML while having xhr availible
            $('#my_frame').contents().append('<div>New HTML</div>');
    
        },
        error: function (response, status, xhr) {
            //do something
        }
    });
    

    【讨论】:

    • 好吧,如果我在div 上这样写,它可以工作,但我现在正在处理一个 iframe,它似乎无法正确加载内容。如果我通过更改该 iframe 的src 来加载内容,有什么方法可以工作吗?
    • 您可能想要做的是这个问题中讨论的内容,可能您不想使用 load 但更改 iframe 上的 src 属性:stackoverflow.com/questions/7177080/…
    • 嗯,我知道如何更改 src 属性,然后让 iframe 加载页面,但是如果我以这种方式加载 iframe,我无法获得 xhr 对象和状态,如你的答案。
    猜你喜欢
    • 2012-01-18
    • 2014-09-10
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多