Django和JSON请求
-
26-09-2019 - |
题
在模板我有以下代码。
<script>
var url="/mypjt/my_timer"
$.post(url, paramarr,
function callbackHandler(dict)
{
alert('got response back');
if (dict.flag == 2)
{
alert('1');
$.jGrowl("Data could not be saved");
}
else if(dict.ret_status == 1)
{
alert('2');
$.jGrowl("Data saved successfully");
window.location = "/mypjt/display/" + dict.rid;
}
},
"json"
);
</script>
在视图我有以下代码,
def my_timer(request):
dict={}
try:
a = timer.objects.get(pk=1)
dict({'flag':1})
return HttpResponse(simplejson.dumps(dict), mimetype='application/javascript')
except:
dict({'flag':1})
return HttpResponse(simplejson.dumps(dict), mimetype='application/javascript')
由于我们正在JSON请求和在try块,设定标志后,我们不能直接返回一个页作为
return render_to_response('mypjt/display.html',context_instance=RequestContext(request,{'dict': dict}))
而不是在HTML页面再次发送响应,因为我们成功重定向代码?
另外,如果有一个例外然后只能我们返回JSON请求。
我唯一关心的是,客户端和服务器之间的交互应该是最小的。
解决方案
如果你喜欢你的响应说:
返回 选择render_to_response( 'MYPJT / display.html',context_instance = RequestContext的(请求,{ '字典': 字典}))
的JavaScript代码将收到您的响应,而不是导航器。我认为你可以做somethink这样的:
<script>
$(document).ready(function()
{
$('#yourForm').submit();
});
</script>
<form id="yourForm" action="/mypjt/my_timer" method="post">
...
your fields with data, even they are hidden
...
</form>
因此,在Django中你可以做的反应就像你说的:
def my_timer(request):
dict={}
try:
a= timer.objects.get(pk=1)
dict({'flag':1})
return render_to_response('mypjt/display.html',context_instance=RequestContext(request,{'dict': dict}))
except:
dict({'flag':0})
return render_to_response('mypjt/error_not_found.html',context_instance=RequestContext(request,{'dict': dict}))
或者,也可以这样做你在做但如果查询“timer.objects.get(PK = 1)”失败,例如,你发回一个布尔标志响应。所以,当它是确定您重定向到你喜欢的页面。
我希望这能对你有用!
其他提示
如果我理解正确,你嗅返回代码在JavaScript,然后根据结果重定向。
您可以从Django中做一个重定向,所以我会做,而不必担心返回代码。当你有两个“标志”和“ret_status”,这是你应该在提示重新考虑你的设计。 :)
另外,遮蔽内置在Python代码dict
对象应该被避免。
不隶属于 StackOverflow