2012-11-14 84 views
1

是否可以使用一個按鈕提交兩個表單?一種形式的值是從JavaScript生成的,另一種形式是從PHP生成的。用一個按鈕提交多個表單,用於php和javascript

我舉了一個例子來說明我在做什麼。

<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> 
+0

您確定要連續執行兩次submit()而不是同步POST調用嗎? –

回答

1

看着你的代碼試圖提交表單並提交之後的二次形式...

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

,如果你的第二個表格的數據是不依賴於第一種形式提交,你可以簡單將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(); 
} 

?> 
+0

非常感謝您的幫助!我確實有一個問題。當id「form」被髮布時document.ready是否被執行?我假設,因爲否則我不知道如何知道何時執行。 – user1104854

+0

沒有document.ready將被執行,一旦你的頁面已完成加載(DOM準備就緒)在瀏覽器按jquery http://api.jquery.com/ready/ –

+0

好吧,所以PHP首先執行,的jQuery/JavaScript的? – user1104854

2

我不相信它可以做到連續兩次提交()調用,因爲調用提交()意味着你正在一個HTTP請求(GET,POST等)和服務器會在其他地方轉發您的頁面。這意味着第二次提交()將永遠不會到達。

發送一個阻塞異步POST/GET調用,然後調用一個submit()甚至第二個POST/GET可能會更好。

EDIT1

請參閱如何make asynchrnonous GET requests in php這個線程。 接下來就是引用本來源

的file_get_contents會做你想要

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

編輯的:一個辦法把火關GET請求並立即返回。

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); 
} 
+1

阻塞異步POST/GET調用是什麼意思?你能舉個例子,我真的很感激它嗎? – user1104854

+0

請看我編輯的答案 –

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

我試圖實現這一點,但沒有發佈。我上面更新了我的代碼,可以請看一下嗎? – user1104854

+0

我的例子使用了jQuery Form Plugin(鏈接在我的文章中)。你需要抓住它才能工作。你可以通過手動序列化表單對象並運行常規$ .ajax來完成,但我發現使用該插件更容易。 –

相關問題