Ajax响应重定向

时间:2015-03-29 11:38:23

标签: jquery ajax django jsonresponse

我遇到的问题是我做了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
                })
...

我该如何解决?

3 个答案:

答案 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);

你想替换它吗?