Ajax 响应重定向

Ajax response redirect

我遇到的问题是我做了 ajax 请求,我的 django 视图处理视图和 return 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
                })
...

我该如何解决?

你试过这个吗:

$( '#contact' ).html(response.content);

你想替换成什么?

我相信你需要做这样的事情:

$('#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 header,更多关于此 here

如果是 post,请确保将 csrfmiddlewaretoken 与 ajax 请求一起发送。否则你会得到一个 403 和可能的重定向。

对此进行测试的一种快速方法是将 @csrf_exempt 装饰器添加到您的视图中。