2010-05-12 64 views
-1

在模板中我有以下代码。Django和JSON请求

<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请求。

我唯一担心的是客户端和服务器之间的交互应该是最小的。

回答

0

如果这样做你喜欢的响应说:

返回 选择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)“失败,例如,您发回一个布尔标志响应。所以,当你确定你重定向到你喜欢的页面。

我希望它对你有用!

0

如果我理解正确,那么您需要嗅探JavaScript中的返回码,然后根据结果重定向。

你可以做一个从Django重定向,所以我会这样做,而不必担心返回代码。当你同时拥有“标志”和“ret_status”时,这是一个暗示,你应该重新考虑你的设计。 :)

另外,应该避免在Python代码中隐藏内置的dict对象。