2011-07-08 10 views
6

私はDjangoで作業しています。私はいくつかのJavascriptのものを行うHTMLページを、持っている、そして私は、このように、jQueryのポストを行いますjqueryでPOSTリクエスト後にリダイレクト

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

この投稿を要求した後、私のDjangoのビューが正しく、このURLのためのコールを処理します。 私がしたいことは、データを処理し、別のページにユーザーを送り、このデータを新しいページに送信することです。 問題は、Pythonでいつものようにリダイレクトを実行できないことです。コードがリダイレクトを無視するようなものです。

私のPythonのコードは次のとおりです。私は、ページを変更することが分かってきた唯一の方法は、上記のコードの後に​​Javascriptを介して行われ

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

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を試しましたが、同じ結果が出ました。

DjangoでjQueryを使って投稿リクエストを送信した後で、どのようにリダイレクトを行うことができますか?

+0

リダイレクトしたい場合、なぜAjaxでやっていますか?通常の方法でフォームを送信してみませんか? Ajaxを使用する主な理由は、リダイレクトを避けることです。 –

+0

私はajaxを使って動的にページのデータを変更し、複雑なデータをサーバーに送信します...そして私はユニークではありません! ;) –

+1

何かが間違っているので、Pythonコードはあまり読み込めません。 – acidjunk

答えて

8

[OK]を、私は魔法を見つけました溶液! :)

状況: jQUery.ajax(によって呼び出されるビューの方法があります)

Ajaxの後にリダイレクトするには、私はヒントがhere(使用ドキュメントの代わりに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

@DanielあなたはAJAX呼び出しでリダイレクトを回避したいという点で正しいですが、あなたがそうすることをどのように対処し、このスタックオーバーフローの問題を見てかかることがあります:How to manage a redirect request after a jQuery Ajax call

+0

これは私の考えと同じです。あなたのリンクには私にとって有益な情報はありません..ポストの後にjsやリダイレクト経由でポストしたデータを送信することについての情報はありません! :( –

1

をオンボタン(この関数を呼び出すクリック)以下のパラメータを渡し、私の場合、私はあなたのサーブレットの内部で新しい

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(); 
+0

は動作しませんが、ajaxの後のコールバック関数で動作します – Sinux

関連する問題