2010-05-12 62 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對象。