-1

私は現在これを持っています:

function submit()
{
    document.getElementById("lostpasswordform").click(); // Simulates button click
    document.lostpasswordform.submit(); // Submits the form without the button
}

<body onload="submit()">

    <form name="lostpasswordform" id="lostpasswordform" action="/" method="post">
        <input type="hidden" name="user_login" id="user_login" class="input" value="<?php echo ($user_login); ?>" />
    </form>

</body>

PCでは動作しますが、何らかの理由でjavascriptがiPhoneから実行されないため、JSの代わりにPHPを使用してフォームを自動送信する方法があるかどうか疑問に思っています?

ありがとう

4

5 に答える 5

2

サーバー側でフォーム送信をトリガーする方法はありません。これには JavaScript のような DOM で動作する言語を使用する必要があります。あなたが私たちに与えてくれたものから、あなたが現在設定している方法でなぜそれがうまくいかないのかわかりません.

コードを確認して、それでもうまくいかない場合は、別のコンテキストでこの質問をすることをお勧めします。JavaScript を完全にダンプするのではなく、iPhone で動作させるようにします。

于 2012-06-21T04:48:59.370 に答える
0

esqew が指摘しているように、サーバーからクライアント側のアクションを実行することはできません。あなたのオプションは、自動送信を必要としないように関数を作り直すか (おそらく、投稿ではなく GET 変数を使用することができます)、または iPhone の回避策を見つけることです。

回避策として、この.click()機能は iPhone では動作しません。tapまたは、このより大きなタッチ ハンドラー関数を使用するなど、この問題から発生した解決策の 1 つを試すことができます。

于 2012-06-21T04:51:10.367 に答える
0

いいえ、PHP はそれを行うことはできませんが、iPhone がクリック イベントを処理する方法に問題があります。背景情報と回避策は次のとおりです。必要なのは、それをトリガーするための空の onclick 関数だけのようです。

// untested
var f = document.getElementById('lostpasswordform');
f.onclick = function () { };
document.lostpasswordform.submit();

ただし、ユーザーのエクスペリエンスについて考えてみてください。フォーム内をクリックすると、フォームが自動的に送信されるのはなぜでしょうか。送信ボタンの何が問題になっていますか?

于 2012-06-21T04:52:10.190 に答える
0

あなたは行為でこれを行うことができます。

方法の例があり、cURLを使用して実行することもできます

<?php

//create array of data to be posted
$post_data['firstName'] = 'Name';
$post_data['action'] = 'Register';

//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);

//we also need to add a question mark at the beginning of the string
$post_string = '?' . $post_string;

//we are going to need the length of the data string
$data_length = strlen($post_string);

//let's open the connection
$connection = fsockopen('www.domainname.com', 80);

//sending the data
fputs($connection, "POST  /target_url.php  HTTP/1.1\r\n");
fputs($connection, "Host:  www.domainname.com \r\n");
fputs($connection,
    "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($connection, "Content-Length: $data_length\r\n");
fputs($connection, "Connection: close\r\n\r\n");
fputs($connection, $post_string);

//closing the connection
fclose($connection);

?>
于 2014-03-14T21:43:20.963 に答える
0

これは、私のような PHP プログラマーからの最小限の JavaScript の回答です。

/** This is the script that will redraw current screen and submit to bank. */
echo '<script>'."\n" ;
echo 'function serverNotifySelected()'."\n" ;
echo '{'."\n" ;
echo '    window.open(\'\', \'BankPaymentScreen\');'."\n" ;
echo '    document.forms[\'bank_form\'].submit();'."\n" ;
echo '    document.forms[\'server_responder\'].submit();'."\n" ;
echo '}'."\n" ;
echo '</script>'."\n" ;

/** This form will be opened in a new window called BankPaymentScreen. */
echo '<form action="https://www.sandbox.bank.com/cgi-bin/webscr" name="bank_form" method="post" target="BankPaymentScreen">'."\n" ;
echo '<input type="hidden" name="cmd" value="_s-xclick">'."\n" ;
echo '<input type="hidden" name="custom" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="hosted_button_id" value="'.$single_product->hosted_button_id.'">'."\n" ;
echo '<table>'."\n" ;
echo '    <tr>'."\n";
echo '        <td><input type="hidden" name="'.$single_product->hide_name_a.'" value="'.$single_product->hide_value_a.'">Local</td>'."\n" ;
echo '    </tr>'."\n" ;
echo '    <tr>'."\n" ;
echo '        <td>'."\n" ;
echo '        <input type="hidden" name="'.$single_product->hide_name_b.'" value="'.$single_product->hide_value_b.'" />'.$single_product->short_desc.' $'.$adj_price.' USD'."\n" ;
echo '        </td>'."\n" ;
echo '    </tr>'."\n" ;
echo '</table>'."\n" ;
echo '<input type="hidden" name="currency_code" value="USD">'."\n" ;
echo '</form>'."\n" ;

/** This form will redraw the current page for approval. */
echo '<form action="ProductApprove.php" name="server_responder" method="post" target="_top">'."\n" ;
echo '<input type="hidden" name="trans" value="'.$transaction_start.'">'."\n" ;
echo '<input type="hidden" name="prod_id" value="'.$this->product_id.'">'."\n" ;
echo '</form>'."\n" ;

/** No form here just an input and a button.  onClick will handle all the forms */
echo '<input type="image" src="https://www.sandbox.bank.com/en_US/i/btn/btn_purchaseimmediateCC_LG.gif" border="0" alt="This Bank - The safer, easier way to pay!" onclick="serverNotifySelected()">'."\n" ;
echo '<img alt="" border="0" src="https://www.sandbox.bank.com/en_US/i/scr/pixel.gif" width="1" height="1">'."\n" ;

これは、1 つのボタンのコードです。このボタンは、現在のページを再描画して購入から事前承認に進み、さらに新しいウィンドウを開き、新しいウィンドウにフォーカスを与え、新しいフォーカスされたウィンドウを支払いプロバイダーに渡します。

これにより、Chrome が新しいページがフォーカスを取得するのをブロックすることも防止されます。

于 2013-09-12T05:08:18.160 に答える