-1

在模板中,我有以下代码。

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

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

4

2 回答 2

0

如果我理解正确,您正在嗅探 JavaScript 中的返回代码,然后根据结果进行重定向。

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

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

于 2010-05-12T23:17:05.827 回答
0

如果你像你说的那样做回应,

return render_to_response('mypjt/display.html',context_instance=RequestContext(request,{'dict': dict}))

JavaScript 代码将收到您的响应,而不是导航器。我认为你可以这样做:

<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)”失败,例如,您将返回一个布尔标志响应。因此,如果可以,您可以重定向到您喜欢的页面。

我希望它对你有用!

于 2010-05-13T12:23:16.813 回答