小编典典

在Django中的AJAX发布后重定向

ajax

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

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

但是,这种方式似乎不是Django。从本质上讲,它是从AJAX而非Django解决问题的。而且,它success_url在DeleteView中无用(但是您仍然必须为分配一个值success_url,否则Django会引发错误)。

那么通过AJAX发布时重定向是否正确?有什么更好的方法吗?

非常感谢。


阅读 329

收藏
2020-07-26

共1个答案

小编典典

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')
             }
        });

如果您不知道将用户发送到哪里,并且希望从服务器获取该网址,只需将其作为参数发送:

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

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

 alert(data.message)
 // do your redirect
 window.location = data.url;
2020-07-26