【发布时间】:2015-09-15 11:33:19
【问题描述】:
我正在尝试通过使用 ajax 函数来更新它来简单地更新布尔表单值,因为我为什么要它重新加载,但无论如何,我已经检查过我正在传递 csrf_token,并确保这不是问题。我认为这是我的 urls.py 的问题,但我不确定它到底是什么。
我可以做些什么来修复这个错误?
这是我的 ajax 表单的 views.py,注意:project_complete 是我模型中的布尔字段
@login_required
def ProjectDetailToDoCForm(request):
form = ProjectToDoCForm(request.POST or None)
if form.is_valid() and request.is_ajax():
args = {}
args.update(csrf(request))
ajaxVal = request.POST.get('booleanValue')
args['doneBool'] = ajaxVal.project_complete
return HttpResponse(json.dumps(args), content_type="application/json")
javascript
<script type="text/javascript">
$(document).on("submit", "#project_edit_date", function(e){
e.preventDefault();
updateForm();
});
function updateForm() {
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]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});
$.ajax({
url: "{% url 'projects:todoc_form' %}",
type: "POST",
datatype: "json",
data: {booleanValue : $("#id_project_complete").val()},
"beforeSend": function(xhr, settings) {
console.log("Before Send");
$.ajaxSettings.beforeSend(xhr, settings);
},
success: function(json){
console.log(json);
console.log("success");
},
error:function(xhr,errmsg,err){
console.log(err);
}
});
}
</script>
表格
<form action="" method="post" id="project_edit_date">{% csrf_token %}
<label for="todoc">Task Done?</label>
<span name="todoc" id="check_done"> {{todocform.project_complete}}</span>
<button type="submit" id="project_edit_button">
<span>Update</span>
</button>
</form>
urls.py
urlpatterns = patterns('',
url(r'^$', views.ProjectView.as_view() , name='project'),
url(r'^create/$', views.createproject, name='create'),
url(r'^edit/(?P<slug>[\w-]+)/$', views.ProjectDetail.as_view(), name='indproject'),
url(r'^view/(?P<slug>[\w-]+)/$', views.ProjectDetailPublic.as_view(), name='pproject'),
url(r'^form/(?P<slug>[\w-]+)/$', require_POST(ProjectDetailForm.as_view()), name='indproject_form'),
url(r'^update/(?P<slug>[\w-]+)/$', require_POST(ProjectDetailToDoForm.as_view()), name='todo_form'),
url(r'^complete/$', ProjectDetailToDoCForm, name='todoc_form'),
)
【问题讨论】:
-
您需要从控制台或开发者工具发布回溯。
-
问题出在服务器端(几乎总是出现 500 个错误)。看看这个:
args['doneBool'] = ajaxVal.project_complete其中ajaxVal = request.POST.get('booleanValue')可能是一个字符串,即它极不可能有.project_complete属性。这就是引发异常的原因。
标签: javascript jquery python ajax django