我遇到的问题是我做了ajax请求,我的django视图处理视图并返回JsonResponse,内容将替换旧内容。不幸的是,响应并没有取代旧内容 - 我在内容上重定向,页面看起来像:
{"content": "<h3>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e</h3>\n<div>\n <a href=\"/\">\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443</a>\n</div>", "success": true}
JS:
$( '#main' ).on( 'click', '#submit', function() {
$form = $( '#form' );
$.ajax({
type: $form.attr('method'),
dataType: "JSON",
url: $form.attr('action'),
data: {
form: $form.serialize()
}
}).done( function( response ) {
console.log('ok');
$( '#old' ).remove();
$( '#contact' ).append(response.content);
})
});
观点:
...
content = render_to_string('mock.html')
return JsonResponse({
'success': True,
'content': content
})
...
我该如何解决?
答案 0 :(得分:2)
我相信你需要做这样的事情:
$('#form').on('submit', function(event){
event.preventDefault();
$form = $('#form');
$.ajax({
type: $form.attr('method'),
dataType: "JSON",
url: $form.attr('action'),
data: {
form: $form.serialize()
}
}).done( function( response ) {
console.log('ok');
$( '#old' ).remove();
$( '#contact' ).append(response.content);
})
});
您需要阻止表单提交。
另一种方法是使用jQuery Form Plugin
接下来你应该做的是将CSRFToken添加到你的Ajax标题中,更多关于这个here
答案 1 :(得分:0)
如果是帖子,请确保使用ajax请求发送csrfmiddlewaretoken。否则你将获得403并可能重定向。
快速测试方法是将@csrf_exempt
装饰器添加到您的视图中。
答案 2 :(得分:-1)
你试过这个:
$( '#contact' ).html(response.content);
你想替换它吗?