【问题标题】:Django Development Server Not Serving Errors from Ajax RequestsDjango 开发服务器不处理来自 Ajax 请求的错误
【发布时间】:2009-12-22 09:28:10
【问题描述】:

我一直在尝试让一些 Ajax 东西在我的 Django 应用程序中工作,但这很困难,因为由于某种原因,语法和类型错误不会导致服务器崩溃并且会静默失败。这怎么可能?

JavaScript (jQuery):

 add_foo = function() {
   var numfoos = $("div#foos_container > div.foo").length + 1;
   var foo_id = numfoos + "-foo";
   var div = $("<div></div>").attr("id",foo_id).addClass("foo");
   div.load("http://localhost:8000/ajax/get/url/");
   div.appendTo("div#foos_container");
    };

Python:

def ajax_add_foo(request):     
  print request.session['editing_foos'].keys()
  keys = request.session['editing_foos'].keys()
  if len(keys) == 0:
    next_key = 1
  else:
    next_key = max([ id_from_prefix(key) for key in keys ])
  print next_key

  form = FooForm(prefix=next_key)
  print next_key
  request.session['editing_foos'].update( {create_prefix(FooForm, next_key) : -1 } ) # This foo is new and has no pkey
  print request.session['editing_foos']
  return render_to_response( 'bar/foo_fragment.html',
        {'fooform' : fooform, },
        context_instance=RequestContext(request))

【问题讨论】:

  • 发送 Ajax 请求的 javascript 代码是什么样的?接受 Ajax 请求的 python 代码是什么样子的?您能否更新它并将其发布在您的问题中。
  • 如果您尝试调试 ajax 的 javascript 端,请尝试:getfirebug.com

标签: ajax django debugging


【解决方案1】:

在出现 Ajax 错误时,Django 仍会生成完整的“调试屏幕”,但不会自动显示。

为 jQuery Ajax 错误注册一个全局处理程序,在新窗口中打开“responseText”: (将此代码放入您的“准备就绪”中)

$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, throwedError){ // 在新窗口中打开 Django 调试屏幕: var w = window.open('','',''); w.document.write(XMLHttpRequest.responseText); });

这会导致熟悉的 Django“调试”页面弹出 ajax 错误。

【讨论】:

    【解决方案2】:

    这可能是因为服务器返回错误代码 (500) 并且您的 jQuery cod 对错误没有执行任何操作。您能否发布您正在使用的 $.get 或 $.post 代码?

    编辑: 如果您使用 $.load,则有一个回调函数的位置,您可以创建它来显示错误。很简单,你需要定义一个类似这样的函数:

    function (responseText, textStatus, XMLHttpRequest){
        if (textStatus < 200 || textStatus >= 299){
            $(document).html(responseText);
        }
    }
    

    这样您就可以将错误消息放入整个文档并查看它。我不完全知道上述方法是否有效,因为我无法对其进行测试,但是您应该能够构建一些可以解决此问题的东西。

    【讨论】:

    • 我是 jQuery 新手 - 我该怎么做?
    • 您必须使用 $.ajax、$.get、$.post。可以发一下吗?
    • 嗯,我设法通过直接访问 URL 来获取错误页面,但无论如何我正在使用此页面定义的 $.load:docs.jquery.com/Ajax/load#urldatacallback 我相信它正在使用 $.get 因为我没有传递任何参数。我如何看到它的输出?我尝试使用 alert( div.load(...) );但我刚刚得到 [object object] 或类似的东西。感谢您的帮助!
    【解决方案3】:

    您在哪里寻找错误报告?它显然不会出现在主网页中,因为您没有请求刷新整个页面。调试 Ajax 的最佳方法是通过 Firebug,您可以在其中查看 Console 选项卡 - 您将看到每个 Ajax 请求对应的一行,如果发生错误,该行将显示为红色。然后,您可以展开该行以查看完整响应,即漂亮的 Django 回溯,您也可以在新选项卡中打开它。

    【讨论】:

      【解决方案4】:

      如果你使用 $.ajax 会有一个错误回调设置,这很容易实现:

      $.ajax({
        ...
        error: function(XMLHttpRequest, textStatus, errorThrown){
          document.write(XMLHttpRequest.responseText);
        },
        ...
      });
      

      【讨论】:

        猜你喜欢
        • 2021-06-25
        • 1970-01-01
        • 2010-09-22
        • 2016-01-02
        • 2019-01-08
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多