【问题标题】:How to debug jQuery AJAX如何调试 jQuery AJAX
【发布时间】:2012-12-09 23:33:56
【问题描述】:

我正在使用 Chrome 来调试我的网站。但是,有时我会遇到这样的错误:

错误

Uncaught TypeError: Cannot set property 'display' of undefined

堆栈跟踪

f.extend.ajax
ClassLoader.performLoadWave

所以,我知道它在我的 Ajax 调用中,可能在我的成功函数中。但是,我的成功函数调用了很多东西。

我并不是真的在找人来帮助我调试我的代码,而只是问我如何调试它。我使用了很多 console.log();但它们并没有真正的帮助,我怎样才能正确地找到像这样的错误?

编辑

补充一下我的问题,在这个例子中,错误出现在一个由我的 AJAX 调用加载的文件中,因为 dataType 设置为“脚本”,但我怎么能知道这一点而无需挖掘几个小时?


代码

对于任何关心我的代码的人,这里是:

$.ajax({
    url: filePath,
    async: false,
    cache: !Settings.debugging,
    dataType: 'script',
    error: function(httpRequest, message, errorThrown){
        if(errorThrown == 'Not Found')
        {
            throw 'Include cannot be found.';
        }
        else
        {
            throw errorThrown + ': ' + (message == 'parsererror' ? 'This doesn\'t look like JavaScript!' : message);
        }
    },
    success: function(){

        $.each(newNeedsLoading, function(index, element){

            if(element !== undefined)
            {

                var className = element.className;
                if(window[className] && window[className]['included'])
                {
                    window[className]['included']();
                }

                className = 'Plugin_' + element.className;
                if(window[className] && window[className]['included'])
                {
                    window[className]['included']();
                }

                className = 'Plugin_Administration_' + element.className;
                if(window[className] && window[className]['included'])
                {
                    window[className]['included']();
                }

                if(element.completed)
                {
                    element.completed();
                }

            }

        });

        ClassLoader.isLoading = false;

    }
});

【问题讨论】:

标签: jquery ajax debugging


【解决方案1】:

经过一番研究,这个问题几乎是这个问题的重复:

Debugging scripts added via jQuery getScript function

【讨论】:

    【解决方案2】:

    Chrome 也有记录 http 请求的选项,开发者工具中的网络选项卡非常有用。

    【讨论】:

      【解决方案3】:

      你试过使用萤火虫吗?您可以通过 CONSOLE 选项卡查看各个 AJAX 请求,包括您发送的参数和从服务器返回的响应。

      http://getfirebug.com/releases/lite/chrome/

      在控制台选项卡中,您应该右键单击并选择记录 XMLHttpRequests。然后,您可以使用“网络”选项卡查看每个请求加载的各个项目。 “标题”面板将显示您的参数。 “预览”面板将显示您的预览。 “响应”面板将向您显示从服务器返回的错误或成功以及您返回的任何数据。

      【讨论】:

      • 从网站上说“JavaScript 调试器不可用”
      【解决方案4】:

      您可以在 javascript 的 success 函数(或 error 或其他任何地方)中设置断点。 有关信息和浏览器内教程,请参阅Chrome Developer Tools: Breakpoints。在你的情况下,请特别注意Breakpoints on XHR

      当您遇到断点时,您可以查看范围内任何变量的值。您也可以使用javascript控制台输入任何javascript,它会在当前范围内执行。

      正如@cockroachbill 所说,您还可以查看网络选项卡以查看所有流量,包括 XHR (XMLHttpRequest) 及其返回的内容。我特别喜欢预览标签。

      【讨论】:

        猜你喜欢
        • 2014-03-20
        • 2011-10-22
        • 1970-01-01
        • 2011-06-11
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        相关资源
        最近更新 更多