AJAX调用没有返回 - 在Django中没有执行成功函数

时间:2011-12-08 21:31:31

标签: django jquery

我在Django中使用jQuery进行AJAX调用。一切似乎工作正常,除了没有返回ajax调用因此没有执行成功函数。这是我的jquery文件

$.ajax({
          type: "POST",
          url: "/contact_us/",
          data: {
            'name': name_val,
            'email': email_val,
            'message': message_val,
            'subject': subject_val,
            'cc': cc_val,
          },
          success: function() 
          {

            // display success message and reset values in the form fields
            $("#reply-message").html('Your message has been sent!').fadeOut(3000, function() {});
            // clear the fields
            $("#contact-name").val("");
            $("#contact-email").val("");
            $("#contact-message").val("");
            $("#contact-subject").val("");


          }

        });

我不知道在AJAX调用的视图中返回什么,所以现在我只是返回一个虚拟消息,但它无法正常工作。这是views.py

def contact_us(request):
    if request.is_ajax():
        if request.method == 'POST':
            name = request.POST.get('name', False)
            email = request.POST.get('email', False)
            message = request.POST.get('message', False)
            subject = request.POST.get('subject', False)
            cc = request.POST.get('cc', False)

            recipients = ['abc@gmail.com']
            if cc:
                recipients.append(email)

            from django.core.mail import send_mail
            send_mail(subject, message, email, recipients)
            return_message = "Sent mail"
            return Httpresponse(return_message)

return_message是假的,我甚至不想在我的回复中处理它。但为什么ajax调用没有返回,休息一切正常,我也收到了邮件。

我刚刚意识到我犯了一个非常愚蠢的错误,我写了Httpresponse,而它必须是HttpResponse。现在它工作得很好

3 个答案:

答案 0 :(得分:1)

我看不到您的代码有任何直接问题。如果您有Firebug,请打开“Net”选项卡,您应该能够看到收到的响应代码并检查响应。你应该得到'200 OK'。

另一个调试选项 - 尝试输入以下内容:

$.ajax({
          type: "POST",
          url: "/contact_us/",
          data: {
            'name': name_val,
            'email': email_val,
            'message': message_val,
            'subject': subject_val,
            'cc': cc_val,
          },
          success: function() 
          {
            // display success message and reset values in the form fields
            $("#reply-message").html('Your message has been sent!').fadeOut(3000, function() {});
            // clear the fields
            $("#contact-name").val("");
            $("#contact-email").val("");
            $("#contact-message").val("");
            $("#contact-subject").val("");
          },
          error: function(jqXHR, textStatus, errorThrown) 
          {
              alert(errorThrown);
           }

        });

如果Ajax调用失败,那应该告诉你问题是什么。

答案 1 :(得分:0)

您的成功函数未被执行的原因可能是因为您没有返回有效的xml。 jquery检查进来的数据,看看它是否是正确的格式,即xml因为你正在使用ajax调用。

重新格式化您的数据,或切换到其他jquery调用。

来自jquery网站上的ajax调用。

  

success(data,textStatus,jqXHR)Function,Array一个函数   如果请求成功则调用。该函数传递了三个   arguments:从服务器返回的数据,格式为   dataType参数;描述状态的字符串;和jqXHR   (在jQuery 1.4.x,XMLHttpRequest中)对象。截至jQuery 1.5,   成功设置可以接受一系列功能。每个功能都会   被轮流打电话。这是一个Ajax事件。

编辑:来自jquery站点的其他信息,检查返回的MIME类型:

  

注意:我们必须确保Web服务器报告的MIME类型   匹配我们选择的dataType。特别是,必须通过声明XML   服务器为text / xml或application / xml,以获得一致的结果。

答案 2 :(得分:0)

这有点晚了,但现在是。

您是否正在传递CSRF token ajax请求?

要对每个请求明确执行此操作,请将令牌添加到发送到服务器的数据

$.ajax({
...
data: {
...
csrfmiddlewaretoken: '{{ csrf_token }}',
...
},
...
});

如果您希望在每次请求时自动发送令牌,那么您必须跳过链接中描述的箍。

无论哪种方式,请务必在django.middleware.csrf.CsrfViewMiddleware文件中的MIDDLEWARE_CLASSES列表中添加settings.py