【问题标题】:Django: Are there any tools/tricks to use on debugging AJAX response?Django:是否有任何工具/技巧可用于调试 AJAX 响应?
【发布时间】:2011-12-24 22:27:50
【问题描述】:

通常,当我从 ajax 调用中收到 500 Internal Server Error 时,我看不到响应的详细信息(因为您不想将它们显示给用户)。在服务器端,我只看到"GET /xxx/yyy/ HTTP/1.1" 500 1150336 这样的行。

在不修改我的客户端代码(即 html/js)的情况下,除非更改很小且一劳永逸,否则我可以使用任何方便的工具或技巧来查看 AJAX 响应的详细信息(从客户端或服务器端或两者)?

使用像 WireShark 这样的数据包捕获程序在这里不是一个选项,因为它没有与我的调试过程一起简化,因此不方便。

请注意,客户端和服务器都是从同一台机器上运行的。

谢谢。

【问题讨论】:

    标签: ajax django debugging


    【解决方案1】:

    基本python logging? 有什么问题您可以将视图设置为记录为请求、响应和任何异常。

    如果你想要一个好的前端来管理和查看异常,你可以使用django-sentry

    编辑:我认为您需要更具体地确定是要调试前端代码还是后端代码。理想情况下你需要两者,虽然我的答案是基于后端调试(计算 500 的),但其他都是前端调试的好建议。

    【讨论】:

    • 我很想使用 python 日志记录来计算 500,但我无法让它在我的情况下工作。问题是它不适用于settings.DEBUG = True,我需要这个设置来提供开发中的静态文件Details on the issue。你有办法解决这个问题吗?谢谢
    【解决方案2】:

    提琴手是你的朋友。

    学习、使用、爱上它。

    【讨论】:

    • 这似乎只适用于 Windows。有多少人在 Windows 上进行开发,然后他们可以将他们的代码部署到一个完全不同的平台上?根据 www.djangosites.org/stats/ 只有 2% 的 Django 站点在 Windows 上运行。这对绝大多数 Django 开发人员来说似乎毫无用处。
    • @fourk - 他正在调试客户端 Ajax 响应。最后我检查了超过 2% 的浏览器在 Windows 上运行。 Fiddler 对此非常有用。
    【解决方案3】:

    使用 FireBug 或 Chrome 开发者工具。两者都允许您检查请求和对您内心内容的响应,以及更多。

    【讨论】:

      【解决方案4】:
      1. 打开调试模式
      2. 启动镀铬
      3. 推送 cmd+option+j(打开开发工具)
      4. 转到网络标签
      5. 点击ajax请求
      6. 点击预览或回复标签

      太棒了!我刚刚意识到 Chrome 也实现了响应的渲染

      【讨论】:

        【解决方案5】:

        这是一个相当老的问题,但由于我将其视为参考并且有一个稍微不同的解决方案,我想我不妨加两分钱。

        我使用 python manage.py runserver_plus,它带有 django 扩展,并为您提供了一个很棒的调试器,它能够在堆栈跟踪的每一级打开一个 shell,并且局部变量完好无损。这里的问题是,在 ajax 调用中,界面没有正确显示,即使在预览窗口中也是如此。我的解决方案是找到调用 javascript 代码,并且出错

          $.ajax({
                    url : window.location.pathname,
                    type : "POST",
                    dataType: "json",
                    data : dataPacket,
                    success : function(json) {
                        alert('it worked!');
                    },
                    error : function(xhr,errmsg,err) {
                        if(xhr.status == 500){
                            document.open();
                            document.write(xhr.responseText);
                            document.close();
                        }
                    });
        

        这会导致完整的堆栈跟踪替换当前窗口。 调试愉快!

        【讨论】:

        • 哇。你约了我。拼命寻找这个。我觉得我不能使用 runserver_plus 来处理使用 ajax 的错误,而且它在 python 编码中非常笨拙,我们可以把它放到一个新标签中
        猜你喜欢
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        相关资源
        最近更新 更多