【问题标题】:empty data from Ajax call来自 Ajax 调用的空数据
【发布时间】:2010-12-22 17:42:41
【问题描述】:

当数据变量应该返回“OK”或“EXISTS”时,它什么也不返回。

我有一个带有叠加效果的模板。 income.html 模板有一个表单和一个“添加新类别”按钮,当您单击它时,会显示一个带有小表单的新窗口(叠加效果)。

收入.html:

(document).ready(function(){ 
$("#new_cat").live("click", ( function() {      
    var cat_name = $("#nc").val();
    if (cat_name) {
        $.get("/cashflow/new_cat/0/", { name: cat_name, account: "{{ account }}" },
          function(data){
            if (data == "OK") {
                $("#id_category").val(cat_name);
            }
            if (data == "EXISTS") {
                var error = "The category already exists";
                alert(error);
            }
          });
    }
    else {
         var error = "Please enter a name";
         alert(error);
    }
}))  
});
</script>
...

<form>{% csrf_token %}
       <label for="name">Name:</label><input type="text" id="nc" />
       <input type="submit" value="Submit" id="new_cat" />
</form>

views.py:

@login_required
def income(request, account_name): 
    account = account_name
    if request.method == 'POST':
        form = TransForm(user=request.user, data=request.POST)
        if form.is_valid():
            income = form.save(commit=False)
            income.type = 0
            income.account = Account.objects.get(
                            name = account_name,
                            user = request.user)
            income.name = form.cleaned_data['name']
            income.category = form.cleaned_data['category']
            income.save()
            uri = ("/cashflow/account/%s") % str(account_name)
            return HttpResponseRedirect(uri)

    else:
        form = TransForm(user=request.user)

    context = {
          'TransForm': form,
          'type': '0',
          'account': account, 
    }
    return render_to_response(
        'cashflow/income.html',
        context,
        context_instance = RequestContext(request),
    )

def new_cat(request, type):
    if request.method == u'GET':
        GET = request.GET
        if GET.has_key(u'name'):
            name = request.GET[u'name']
            account = request.GET[u'account']
            c = Category.objects.filter(name=name, account=account)
            if c:
                s = "EXISTS"
            else:
                c = Category(name = name, user = request.user, 
                        type = type, account = account)
                c.save()
                s = "OK"

    return HttpResponse(s)

编辑:调试信息

> ../cashflow/views.py(765)new_cat()-><django....xa507b0c>
-> return HttpResponse(message)
(Pdb) p message
'EXISTS'
(Pdb) n
> ../site-packages/django/core/handlers/base.py(112)get_response()
-> if response is None:
 p response.content
'EXISTS'
(Pdb) p response.status_code
200

奇怪的是,当我想调试时,覆盖显示在调试时,而不是之后。这就是为什么我认为这是一个 JS 错误。我忘了告诉类别已创建并正确保存到数据库中。

【问题讨论】:

    标签: jquery ajax django


    【解决方案1】:

    您确定 AJAX 调用正常工作吗?向$.get 添加错误处理程序。

    http://api.jquery.com/jQuery.ajax/

    或整体 AJAX 错误处理程序:

    http://api.jquery.com/ajaxError/

    【讨论】:

      【解决方案2】:

      您检查过 javascript 错误吗?

      在我看来 {{ account }} 在视图中是 account_name,如果名称有任何含义,它很可能是一个字符串。

      在您的 ajax 模板中,您直接提供不带引号的 {{ account }},因此它应该会因为未定义而引发 javascript 错误。

      另外,在这种情况下,我总是会在您的 ajax 调用中进行更多调试。抛出 pdb.set_trace() 并查看发送请求时代码在做什么。它在哪里死去?

      当它检查GET,查找键account,是否曾经定义变量s时,您可以逐字逐句浏览代码。

      【讨论】:

      • 我修复了错误并忘记在帖子中修改它。你是对的,它抛出了一个javascript错误。我调试了从 ajax 函数调用的视图,所有视图都执行得很好。
      • 如果视图没有返回任何内容,它就不能正常工作!浏览器调试器在 XHR 中向您显示什么作为服务器响应?没有错误信息?您确定您没有收到错误消息而是 nothing 吗?例如,除非您禁用 CSRF,否则此视图会出现问题。
      • 首先要判断这是JS还是Django。执行 ajax 调用,并告诉我们您在浏览器调试器的 ajax 响应中看到的内容。
      • 我认为这是一个 JS 错误,我用更多信息编辑了我的初始帖子。
      • 好的,很好的调试——视图肯定执行正确。实际反应如何? (JS 调试器)它看到了什么?什么是变量data
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      相关资源
      最近更新 更多