jquery - 在 Django 中 AJAX 发布后重定向

标签 jquery ajax django redirect django-generic-views

我使用 Django 的内置删除 View ,并为 success_url 属性分配了一个值。现在在我的模板中,我通过 JQuery 的 $.post() 方法触发此 View 。删除该项目后,我不会重定向到 success_url。经过一番查找,发现好像是AJAX post方法的问题,忽略了重定向。

我通过添加一个函数将 window.location="#myRedirectionURL" 设置为 JQuery 中 $.post() 的第三个参数来修复此问题。

但是,这种方式看起来不太像Django。本质上,它是从AJAX的角度解决问题,而不是从Django的角度解决问题。更重要的是,它使DeleteView中的success_url变得无用(但你仍然必须为success_url分配一个值,否则Django会引发错误)。

那么当您通过 AJAX 发帖时,这是正确的重定向方式吗?有没有更好的办法?

非常感谢。

最佳答案

Ajax 不会重定向页面!

从重定向中获得的是 POST 响应数据对象内新页面的 html 代码。

如果您知道在任何操作失败时将用户重定向到哪里,您可以简单地执行以下操作:

在服务器上,

如果出现错误

response = {'status': 0, 'message': _("Your error")} 

如果一切顺利

response = {'status': 1, 'message': _("Ok")} # for ok

发送响应:

return HttpResponse(json.dumps(response), content_type='application/json')

在 html 页面上:

$.post( "{% url 'your_url' %}", 
         { csrfmiddlewaretoken: '{{ csrf_token}}' , 
           other_params: JSON.stringify(whatever)
         },  
         function(data) {
             if(data.status == 1){ // meaning that everyhting went ok
                // do something
             }
             else{
                alert(data.message)
                // do your redirect
                window.location('your_url')
             }
        });

如果您不知道将用户发送到哪里,并且您更喜欢从服务器获取该 URL,只需将其作为参数发送即可:

response = {'status': 0, 'message': _("Your error"), 'url':'your_url'} 

然后将其替换为窗口位置:

 alert(data.message)
 // do your redirect
 window.location = data.url;

关于jquery - 在 Django 中 AJAX 发布后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29137910/

相关文章:

ajax - Jasmine Ajax request.respondWith 不工作

python - Django 模型不会使用 .update() 进行更新

python - Django - 如何将 user_pass_test 与 url 一起使用

python - Django ;使 View 变薄的技巧

php - .live 和 ajax 的问题

jquery - 根据屏幕大小删除 CSS 类 jQuery

javascript - html音频在单击播放时静音,然后在单击静音时再次静音

javascript - Js 文件没有创建 Jquery 变量

javascript - Ajax每秒发送请求并使CPU使用率高

javascript - RxJS v5 : How to make a POST request with params?