Перенаправление после запроса POST с помощью jquery - PullRequest
6 голосов
/ 08 июля 2011

Я работаю с Джанго. У меня есть страница HTML, где я делаю некоторые вещи Javascript, а затем делаю пост jQuery следующим образом:

$.ajax({ 
  url: '/xenopatients/measurement/qual', 
  type: 'POST', 
  data: {'obj':data}, 
  dataType: 'json', 
  contentType: "application/json; charset=utf-8", //questo ok 
}); 

После этого пост-запроса мой вид Django правильно обрабатывает вызов для этого URL. Я хочу, чтобы он обработал данные, отправил пользователя на другую страницу и отправил эти данные на новую страницу. Проблема в том, что я не могу выполнить перенаправление как обычно в Python, как будто код игнорирует перенаправление.

Мой код Python:

@csrf_protect 
@login_required#(login_url='/xenopatients/login/') 
def qualMeasure(request): 
    name = request.user.username 
    print "enter" 
    if request.method == 'POST': 
        print request.POST 

        if "obj" in request.POST: 
            print 'obj received' 
            return render_to_response('mice/mice_status.html', RequestContext(request)) 

    return render_to_response('measure/qual.html', {'name': name, 'form': QualMeasureForm()}, RequestContext(request)) 

Единственный способ изменить страницу - найти через Javascript после кода выше:

top.location.href = "/xenopatients/measurement";

Но я не знаю, как передать данные, которые мне нужны при использовании этого метода.

HTML-код:

<form action="" method=""> 
  <table id="dataTable" width="100%" border="1"></table><br> 
  <script language="javascript"> 
    document.measureForm.id_barcode.focus(); 
    document.measureForm.Add.disabled = false; 
    $('#dataTable').tablePagination({}); 
  </script> 
  <input type="button" name="save" value="Save Measure Serie" onclick="table2JSON('dataTable')"/> 
</form> 

P.S. Я также пробовал $.post, но с теми же результатами.

Как я могу сделать перенаправление после почтового запроса, сделанного с помощью jQuery в Django?

Ответы [ 3 ]

8 голосов
/ 14 мая 2012

Хорошо, я нашел волшебное решение!:)

Ситуация: существует метод представления, вызываемый jQUery.ajax ()

Чтобы перенаправить после Ajax, я использовал найденные подсказки здесь (используйтеdocument вместо 'body' в селекторе jQuery)

Но у меня были и другие операции.

в вызываемом представлении вызовите другой метод, например:

[...]
if request.method == 'POST':
    if "obj" in request.POST: #ricevuti dati da ajax
        request.session['qual'] = request.POST['obj']
        return HttpResponseRedirect(reverse("xenopatients.views.qualReport"))

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

Вызов другого метода - это ключ для перенаправления страницы браузера.Фактически, в конце вызванного метода вы можете написать и выполнить:

return render_to_response('measure/qualReport.html', {'name':name, 'list_report': report, 'message':'Measures correctly saved'}, RequestContext(request))

Надеюсь, это кому-нибудь пригодится!;)

1 голос
/ 26 ноября 2012

При нажатии кнопки вызовите эту функцию () ниже и передайте параметр, в моем случае я передал новый

function checkforNew(){
                //jQuery.post('<%=request.getContextPath()%>/InspectionController?&oper=new');

                jQuery.ajax({
                    type: "POST",
                    url: '<%=request.getContextPath()%>/MyController?&oper=new',
                    //data: {'obj':data},
                    dataType: "json",
                    success: function(response){
                        window.location.href = response.redirect;
                    }
                });
            }

Внутри вашего сервлета вы должны указать следующий код для перенаправления страницы.

String destination = "/mypage.jsp;

                response.setContentType("application/json");
                JSONObject responsedata = new JSONObject();
                responsedata.put("redirect", destination);

                out.print(responsedata);
                out.flush();
1 голос
/ 08 июля 2011

@ Даниэль прав в том, что вы хотите избежать перенаправлений с помощью вызовов ajax, но вы можете взглянуть на этот вопрос переполнения стека, в котором рассматривается, как это сделать: Как управлять запросом на перенаправление после вызова jQuery Ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...