我在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。现在它工作得很好
答案 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
。