-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

If you do the response like you said,

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

the JavaScript code will receive your response, not the navigator. I think you can do somethink like this:

<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>

So, in Django you can do the response like you said:

 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}))

Or, you can do like you were doing but if the query "timer.objects.get(pk=1)" fails, for example, you send back a boolean flag response. So, when it is OK you redirect to the page you prefer.

I hope it could be useful to you!

于 2010-05-13T12:23:16.813 に答える
0

私の理解が正しければ、あなたは JavaScript の戻りコードを盗聴し、結果に応じてリダイレクトしています。

Django からリダイレクトを行うことができるので、リターン コードを気にする代わりにそれを行います。"flag" と "ret_status" の両方がある場合は、設計を再考する必要があるというヒントです。:)

また、Python コードで組み込みオブジェクトをシャドウするdictことは避ける必要があります。

于 2010-05-12T23:17:05.827 に答える