AJAX 不适用于 Django 应用程序
Posted
技术标签:
【中文标题】AJAX 不适用于 Django 应用程序【英文标题】:AJAX not working with Django App 【发布时间】:2014-11-10 04:48:30 【问题描述】:mysite/urls.py:
from mysite import views
url(r'^checkhandles/$', views.checkhandles, name='checkhandles'),
mysite/views.py:
def checkhandles(request, email):
if request.is_ajax():
message = 'Yes, I am reachable!'
else:
message = 'No, I am not reachable!'
return HttpResponse(message)
mysite-ajax.js:准备 DOM。
$(document).on('blur', '#email', function()
var $this = $( this );
var email = $this.val();
if (validateEmail(email) === true)
alert(email);
var request = $.ajax(
url: "/mysite/checkhandles/",
type: "POST",
data: email : email ,
dataType: "json"
);
request.done(function( msg )
alert( msg );
//$(".email_details").html( msg );
//$(".email_etails").slideDown(150);
);
;
)
我是如何工作的?只有alert(email)
和alert(msg)
可以判断AJAX 是否成功是行不通的。
【问题讨论】:
您如何使 what 发挥作用?目前什么不工作? “从此以后什么都不会发生”是什么意思?你期望发生什么? @DanielRosemanalert(msg)
没有弹出,这表明我的 AJAX 无法正常工作,我不知道该怎么做。
你在 Django 控制台中看到了什么?在浏览器开发工具控制台中呢?您是否尝试向 Ajax 对象添加 fail
处理程序?
它没有显示任何内容。当我 Tab 时,它只是转到下一个文本框。让我加fail
看看。
@DanielRoseman:我试过request.fail(function()alert('AJAX fail to load your content');)
,它会提醒AJAX fail to load your content
。我该怎么办?
【参考方案1】:
这是一个 CSRF 令牌问题。你发送csrftoken
cookie 吗?前往https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#csrf-ajax 了解附加内容并从 Django 网站复制/粘贴此 javascript 代码:
// using jQuery
function getCookie(name)
var cookieValue = null;
if (document.cookie && document.cookie != '')
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++)
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '='))
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
return cookieValue;
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method)
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
$.ajaxSetup(
beforeSend: function(xhr, settings)
if (!csrfSafeMethod(settings.type) && !this.crossDomain)
xhr.setRequestHeader("X-CSRFToken", csrftoken);
);
【讨论】:
以上是关于AJAX 不适用于 Django 应用程序的主要内容,如果未能解决你的问题,请参考以下文章