Джанго и JSON запрос - PullRequest
       29

Джанго и JSON запрос

0 голосов
/ 13 мая 2010

В шаблоне у меня есть следующий код.

<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-запрос.

Меня беспокоит только то, что взаимодействие между клиентом и сервером должно быть минимальным.

Ответы [ 2 ]

0 голосов
/ 13 мая 2010

Если вы сделаете ответ, как вы сказали,

возврат render_to_response ( 'mypjt / display.html', context_instance = RequestContext (запрос, { 'ДИКТ': ДИКТ}))

код 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)» не выполняется, например, вы отправляете ответ с логическим флагом. Итак, когда все в порядке, вы перенаправляете на страницу, которую предпочитаете.

Я надеюсь, что это может быть полезно для вас!

0 голосов
/ 13 мая 2010

Если я правильно понимаю, вы вынюхиваете код возврата в JavaScript, а затем перенаправляете в зависимости от результатов.

Вы можете сделать перенаправление из Django, поэтому я бы сделал это вместо того, чтобы беспокоиться о кодах возврата. Когда у вас есть и «флаг», и «ret_status», это совет, вы должны переосмыслить свой дизайн. :)

Кроме того, следует избегать дублирования встроенного объекта dict в коде Python.

...