我正在使用Django。我有一个HTML页面,我在那里做一些Javascript的东西,然后我用这样的方式做一个jQuery帖子:
$.ajax({
url: '/xenopatients/measurement/qual',
type: 'POST',
data: {'obj':data},
dataType: 'json',
contentType: "application/json; charset=utf-8", //questo ok
});
在此帖子请求之后,我的Django视图正确处理了此URL的调用。 我想要它做的是处理数据,将用户发送到另一页,并将此数据发送到新页面。 问题是我不能像往常一样在Python中执行重定向,就像代码忽略重定向一样。
我的Python代码是:
@csrf_protect
@login_required#(login_url='/xenopatients/login/')
def qualMeasure(request):
name = request.user.username
print "enter"
if request.method == 'POST':
print request.POST
if "obj" in request.POST:
print 'obj received'
return render_to_response('mice/mice_status.html', RequestContext(request))
return render_to_response('measure/qual.html', {'name': name, 'form': QualMeasureForm()}, RequestContext(request))
我发现更改页面的唯一方法是在上面的代码之后使用Javascript:
top.location.href = "/xenopatients/measurement";
但是我不知道在使用这种方法时如何传递我需要的数据。
HTML代码:
<form action="" method="">
<table id="dataTable" width="100%" border="1"></table><br>
<script language="javascript">
document.measureForm.id_barcode.focus();
document.measureForm.Add.disabled = false;
$('#dataTable').tablePagination({});
</script>
<input type="button" name="save" value="Save Measure Serie" onclick="table2JSON('dataTable')"/>
</form>
P.S。我也尝试了$.post
,但结果相同。
如何在Django中使用jQuery发出请求后进行重定向?
答案 0 :(得分:8)
好的,我找到了神奇的解决方案! :)
情况: 有一个由jQUery.ajax()
调用的视图方法要在Ajax之后重定向,我使用了here找到的提示(在jQuery选择器中使用文档而不是'body')
但是,我还有进一步的行动要做。
在被调用的视图中,调用另一个方法,如下所示:
[...]
if request.method == 'POST':
if "obj" in request.POST: #ricevuti dati da ajax
request.session['qual'] = request.POST['obj']
return HttpResponseRedirect(reverse("xenopatients.views.qualReport"))
我在会话中保存了我需要的数据。我在被调用的视图中使用这些数据。
调用另一种方法,它是重定向浏览器页面的键。 实际上,在被调用方法结束时,您通常可以编写&amp; execute:
return render_to_response('measure/qualReport.html', {'name':name, 'list_report': report, 'message':'Measures correctly saved'}, RequestContext(request))
希望这对某人有用! ;)
答案 1 :(得分:1)
@Daniel是正确的,因为你想避免使用ajax调用进行重定向,但你可能会看一下这个Stack Overflow问题,该问题解决了如何执行此操作的问题:How to manage a redirect request after a jQuery Ajax call
答案 2 :(得分:1)
在按钮上单击调用此函数()并传递参数,在我的情况下,我传递了新的
function checkforNew(){
//jQuery.post('<%=request.getContextPath()%>/InspectionController?&oper=new');
jQuery.ajax({
type: "POST",
url: '<%=request.getContextPath()%>/MyController?&oper=new',
//data: {'obj':data},
dataType: "json",
success: function(response){
window.location.href = response.redirect;
}
});
}
在servlet中,您需要提及以下代码,以便重定向页面。
String destination = "/mypage.jsp;
response.setContentType("application/json");
JSONObject responsedata = new JSONObject();
responsedata.put("redirect", destination);
out.print(responsedata);
out.flush();