2012-01-08 24 views
0

page2.phpにリダイレクトするフォームがあります。ページ2の読み込み直後にフォームからpage3.phpにデータを渡したいと思います。 php。 (ユーザーはページ3で何が起こっているのか、ページ2のみを見る必要はありません)フォームを送信し、新しいページからajaxにフォームデータを送信します

変数を渡すにはどうすればよいですか?現在、私は

page1.php

<html> 
      <form action=page2.php method=post> 
        <!-- form content here incl name attr for input elements --> 
      </form> 
    </html> 

page2.php

<body> 
    <?php 
      $var1 = $_POST['name1']; // int 
      $var2 = $_POST['name2']; // int 
      $var3 = $_POST['name3']; // int 
      $var4 = $_POST['name4']; // str 
    ?> 
    <!-- some code here --> 
    <script> 
      var var1 = <?php echo $var1; ?>;   
      var var2 = <?php echo $var2; ?>;   
      var var3 = <?php echo $var3; ?>;   
      var var4 = "<?php echo $var4; ?>";   
      $.post('page3.php',{var1: var1, var2: var2, var3: var3, var4: var4});   
    </script> 
    </body> 

page3.php

<?php   
      $var1 = $_POST['var1']; 
      $var2 = $_POST['var2']; 
      $var3 = $_POST['var3']; 
      $var4 = $_POST['var4']; 
    ?> 

使用しています。これは私にとってはあまりにも多くのjqueryショートカットですか?シリアライズを使って私を助けるにはどうすればいいですか? b。これは完全には機能していません... $ .postに何らかの問題があると思います。それはうまくいきません。私はわかりません。

助けていただければ幸いです。

+0

page3.phpのデータを取得したいのですか、単にデータを送信したいですか? –

+0

はい、私はpage3.phpのデータを取得したいのですが、POSTがやっていることではありませんか? page2.phpから送信されたデータを取得しますか? –

+0

これは右のように見える – Prescott

答えて

0

この方法で、Ajaxの最初のAを完全に無効にすると、が非同期になります。あなたがするべきことは、あなたの最初のページにフォームの送信イベントにajax呼び出しを追加することです。

<form action="action.php" method="GET" id="form"> 
    <input name="var1" /> 
    <input name="var2" /> 
    <input name="var3" /> 
    <input name="var4" /> 

    <input type="submit" /> 
</form> 

<script> 
$('#form').submit(function() { 
    $.post('action.php', { 
     var1: $('input[name="var1"]').val(), 
     var2: $('input[name="var2"]').val(), 
     var3: $('input[name="var3"]').val(), 
     var4: $('input[name="var4"]').val() 
    });   

    return false; //Prevent form from actually submitting 
}); 
</script> 

この方法では、ユーザーがJavaScriptを使用している場合、フォームは非同期で(jQueryによって新しいページをロードする必要なく)送信されます。しかし、ユーザーがjavascriptを持っていない場合、フォームは正常に提出されます。


あなたpage3.phpは(私がaction.php呼んだもの)、ユーザは、あなたがignore_user_abort()set_time_limit()になります離れて移動した後も実行し続けていることを確認します。

//At the top of page3.php 
ignore_user_abort(true); //Allow user to navigate away 
set_time_limit(0);  //Allow script to run indefinitely 

そして、私は上記の提案として、私が行ったように、あなたはまだAJAXでのフォームを提出しなければなりません。上記の2つのPHP関数は、中間のスクリプトpage2.phpの必要性を排除します。これと同じように:

page1.php

<form action="" method="get" id="form"> 
    <input name="var1" /> 
    <input name="var2" /> 
    <input name="var3" /> 
    <input name="var4" /> 

    <input type="submit" /> 
</form> 

<script> 
$('#form').submit(function() { 
    $.post('page3.php', { 
     var1: $('input[name="var1"]').val(), 
     var2: $('input[name="var2"]').val(), 
     var3: $('input[name="var3"]').val(), 
     var4: $('input[name="var4"]').val() 
    });   

    return false; //Prevent form from actually submitting 
}); 
</script> 

ユーザーは今page1.phpに必要事項を記入し、送信ボタンを打つことができます。 jQueryはフォームの送信を傍受し、AJAX経由でpage3.phpにデータを送信します。

page3.php

ignore_user_abort(true); //Allow user to navigate away 
set_time_limit(0);  //Allow script to run indefinitely 

//Rest of processing code... 

page3.phpは、AJAX要求を受信し、その仕事をするために開始されます。ユーザーがpage1.phpからナビゲートすると、AJAXリクエストはキャンセルされます(page3.phpのリクエストへの接続は失われます)が、page3.phpは引き続き実行されます。

+0

いいえ!これは私が必要とするものではありません。私はアヤックスが何であるか知っています。 ajaxの呼び出しには約1時間かかります。ユーザーはすぐにpage2.phpに行き、page3.phpをバックグラウンドで実行させます。私の質問もここで読んでください:http://stackoverflow.com/questions/8768470/submit-form-with-ajax-but-redirect-to-another-page/8768496#8768496 –

+0

@LucyWeatherfordごめんなさい。あなたの質問を最初に読んだとき、それはあまり明確ではありませんでした。投稿を更新して関連情報を追加することを許可します。 –

+0

大丈夫です!非常に有望です:-)しかし、どのように*私は次にpage2.phpにリダイレクトしますか?結局のところ、ユーザーがフォームを送信したので、フォームを送信するときに、別の場所にユーザーをリダイレクトする必要があります。 –

関連する問題