1

1つのボタンで2つのフォームを送信できますか? 一方のフォームの値は JavaScript から生成され、もう一方のフォームは PHP から生成されます。

私が試みていることのアイデアを与えるために例を作りました。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>

<?php
Class testing{

    function text_test(){
        ?>
        <form method="post" name="postform">
        <input type="textbox" name="text"/>
        <input type="submit" onclick ="submit_form()" name="submit"/>
        </form>
        <?php
    }

    function display(){
        echo $_POST['text'];
        echo $_POST['js_input'];
     }
 }
$test = new testing();
$test->text_test();

if(isset($_POST['js_form'])){
    $test->display();
}
?>

<script type="text/javascript">
    var jsvariable = "js_test";
</script>

<form method="post" name="js_form">
<input type="hidden" name="js_input"    value="document.getElementByName(jsvariable).value" />
</form>

<script type="text/javascript">
function submit_form(){
    $('postform').each(function () {
            $(this).ajaxForm();  //Initialize as ajaxForm
            var options = {
               context: this
            }                 
            $(this).ajaxSubmit(options); //Submit form with options above
    });
    $('js_form').each(function () {
        $(this).ajaxForm();  //Initialize as ajaxForm
        var options = {
           context: this
        }                 
        $(this).ajaxSubmit(options); //Submit form with options above
     });
 }
 </script>
4

3 に答える 3

2

submit() を呼び出すということは、HTTP リクエスト (GET、POST など) を行っていることを意味し、サーバーがページを別の場所に転送することを意味するため、submit() 呼び出しを 2 回連続して実行できるとは思えません。これは、2 番目の submit() に到達しないことを意味します。

ブロックする非同期の POST/GET 呼び出しを送信し、その後で submit() または 2 回目の POST/GET を呼び出した方がよい場合があります。

編集1

php で非同期の GET リクエストを作成する方法については、このスレッドを参照してください。続きはこちらのソースより引用

file_get_contents はあなたが望むことをします

$output = file_get_contents('http://www.example.com/');
echo $output;

編集: GET リクエストを発行してすぐに返す 1 つの方法。

http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.htmlから引用

function curl_post_async($url, $params)
{
    foreach ($params as $key => &$val) {
      if (is_array($val)) $val = implode(',', $val);
        $post_params[] = $key.'='.urlencode($val);
    }
    $post_string = implode('&', $post_params);

    $parts=parse_url($url);

    $fp = fsockopen($parts['host'],
        isset($parts['port'])?$parts['port']:80,
        $errno, $errstr, 30);

    $out = "POST ".$parts['path']." HTTP/1.1\r\n";
    $out.= "Host: ".$parts['host']."\r\n";
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out.= "Content-Length: ".strlen($post_string)."\r\n";
    $out.= "Connection: Close\r\n\r\n";
    if (isset($post_string)) $out.= $post_string;

    fwrite($fp, $out);
    fclose($fp);
}
于 2012-11-14T13:44:02.307 に答える
1

コードを見て、フォームを送信しようとしていて、その後二次フォームを送信しようとしています...

if(isset($_POST['submit'])) {
    ?>
    <script type="text/javascript">
        document.js_form.submit();
    </script>
    <?php

2 番目のフォーム データが送信された最初のフォームに依存していない場合は、単純に APPEND フォーム要素を php フォームに追加できます。以下を参照してください。

 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">

    var jsvariable = "js_test";

    $(document).ready(function(){
      //append form elements here...
      $('#form').append('<input type="hidden" name="js_input" value="'+jsvariable+'" />');
    });

</script>


<?php
Class testing{

    function text_test(){
        ?>
        <form method="post" name="postform" id="form">
        <input type="textbox" name="text"/>
        <input type="submit" name="submit"/>
        </form>
        <?php
    }

    function display(){
        echo $_POST['text'] . '<br>';
        echo $_POST['js_input'];
    }
}

$test = new testing();
$test->text_test();

if(isset($_POST['submit'])) {
    $test->display();
}

?>
于 2012-11-14T14:55:09.373 に答える
1

Ajax を介して個別に送信できます。jQuery とForm Pluginを使用した例を次に示します。始める必要があります。

     $('form').each(function () {
            $(this).ajaxForm();  //Initialize as ajaxForm
            var options = {
               success: succesCallback,
               error: errorCallback,
               context: this
            }                 
            $(this).ajaxSubmit(options); //Submit form with options above
    });
于 2012-11-14T13:51:18.043 に答える