jQuery $.get 在处理错误时返回白色错误页

jQuery $.get returns white error page when handling errors

本文关键字:错误 返回 白色 处理 get jQuery      更新时间:2023-09-26

当我请求一个页面时,下面的代码给了我这样的错误,它返回404。相反,它应该发出警报。奇怪的是,它只在已 ajaxed 的链接上执行此操作,在不更新/更改的链接上工作正常。

('.page-wrap').append('<img src="img/graphics/ajax-loader.gif" class="ajax-loader" />');
    var target = $('section.content'),
        siteURL = 'http://' + top.location.host.toString(),
        internalLinks = $("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']"),
        links = $('a'),
        URL,
        el,
        mainContent,
        headContent,
        headClasses,
        pageName,
        ajaxSpinner = $('.ajax-loader');
    internalLinks.click(function(e) {
        el = $(this);
        URL = el.attr('href');
        $('.current_page_item').removeClass('current_page_item');
        el.addClass("current_link").parent().addClass("current_page_item");
        ajaxLoader(URL, false);
        e.preventDefault();
    });
    function ajaxLoader(location, isHistory) {
            $("html, body").animate({ scrollTop: "0px" });
            ajaxSpinner.show();
            $('.page-wrap').css('opacity', '0.5}');

            // Load New Page
            $.get(location, function(data) {
                mainContent = $('section.content', data).html();
                headContent = $('.feature-content', data).html();
                pageName = $('.page-name', data).html();
                headClasses = $('header', data).attr('class');
                $('section.content').html(mainContent);
                $('.page-name').html(pageName);
                $('.feature-content').html(headContent);
                if (headClasses) {
                    $('header').attr('class', headClasses);
                } else {
                    $('header').removeClass();
                }
                if (!isHistory) {
                    history.pushState(location, '', location);
                }
                $(resizeHeader);
                ajaxSpinner.fadeOut();
            }).error(function() {
                alert('woops'); // or whatever
            });
    }
    w.bind('popstate', function(event) {
        if (event.originalEvent.state !== null ) {
            ajaxLoader(event.originalEvent.state, true);
        }
    });

第一个想法

    是否可能是
  • 成功处理程序代码中的某些内容导致某种错误?就像第一次成功返回的任何 html 的注入会导致脚本第二次失败一样?

  • 认为你选择的Fiddler/Firebug/F12开发人员工具是什么 - 你正在使用其中一个,对吧?:)密切关注任何控制台错误...

第二个想法

你使用的是哪个jQuery版本?

我已经用 jq 1.8.2 对此进行了测试,错误处理程序对我来说工作得很好,但如果这是一个 JSONP 请求,它不会触发 error() 函数。我接受了您的代码的要点:

$.get(
               "404MeBaby.html", function (data) {
                   $(".result").html(data);
                   console.log(data);
               }
            ).error(
            function (x) {
                console.log("well that didn't go so well...");
            });

从 API :

从 jQuery 1.5 开始,成功回调函数也传递了一个 "jqXHR"对象(在jQuery 1.4中,它被传递了XMLHttpRequest 对象)。但是,由于 JSONP 和跨域 GET 请求不使用 XHR,在这些情况下,jqXHR 和 textStatus 参数传递给 成功回调未定义。

您可以尝试改用$.ajax,因为它提供了更多的控制。或者,您可以设置 jQuery 全局 ajax 选项,如下所示,这些选项将影响所有 $.get 调用,但请记住 JSONP 的诅咒,如果相关的话!