web-dev-qa-db-ja.com

JavaScript変数をPHP POST

可能性のある複製:
フォーム送信のようなJavaScript投稿リクエスト

入力フォームの一部としてPHPスクリプトに渡したいJSで計算された値があります。JS値をPHP as POST parameter?

基本的に、送信時に、total varをpostを介して次のスクリプトに渡す必要があります。

頭に浮かぶ最初のアイデアは、その中に値を持ち、フォームで入力される目に見えない入力フォームを作成することです、それは可能ですか?

19
Peter Kazazes

はい、<input type="hidden" />を使用し、javascriptコードでその非表示フィールドの値を設定して、他のフォームデータとともに投稿できるようにすることができます。

14
joshuahealy

これを実現する方法はたくさんあります。非表示のフォーム要素を使用して、あなたが求めている方法に関して。

フォーム内にこのフォーム要素を作成します。

<input type="hidden" name="total" value="">

したがって、次のようなフォーム:

<form id="sampleForm" name="sampleForm" method="post" action="phpscript.php">
<input type="hidden" name="total" id="total" value="">
<a href="#" onclick="setValue();">Click to submit</a>
</form>

次に、javascriptを次のようにします。

<script>
function setValue(){
    document.sampleForm.total.value = 100;
    document.forms["sampleForm"].submit();
}
</script>
14
John Petrilli

これを行うには、Ajaxを使用します。私はこのような何かに使用する関数を持っています:

function ajax(elementID,filename,str,post)
{
    var ajax;
    if (window.XMLHttpRequest)
    {
        ajax=new XMLHttpRequest();//IE7+, Firefox, Chrome, Opera, Safari
    }
    else if (ActiveXObject("Microsoft.XMLHTTP"))
    {
        ajax=new ActiveXObject("Microsoft.XMLHTTP");//IE6/5
    }
    else if (ActiveXObject("Msxml2.XMLHTTP"))
    {
        ajax=new ActiveXObject("Msxml2.XMLHTTP");//other
    }
    else
    {
        alert("Error: Your browser does not support AJAX.");
        return false;
    }
    ajax.onreadystatechange=function()
    {
        if (ajax.readyState==4&&ajax.status==200)
        {
            document.getElementById(elementID).innerHTML=ajax.responseText;
        }
    }
    if (post==false)
    {
        ajax.open("GET",filename+str,true);
        ajax.send(null);
    }
    else
    {
        ajax.open("POST",filename,true);
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        ajax.send(str);
    }
    return ajax;
}

最初のパラメーターは、変更する要素です。 2番目のパラメーターは、変更する要素にロードするファイル名の名前です。 3番目のパラメーターは、GETまたはPOST使用しているデータです。たとえば、「total = 10000&othernumber = 999」。最後のパラメーターは、POSTまたはGETする場合はfalse。

9
user1294348

隠されたフォーム要素のアイデアはしっかりしています。このようなもの

<form action="script.php" method="post">
<input type="hidden" name="total" id="total">
</form>

<script type="text/javascript">
var element = document.getElementById("total");
element.value = getTotalFromSomewhere;
element.form.submit();
</script>

もちろん、これにより場所がscript.phpに変更されます。これをユーザーに見えないようにしたい場合は、AJAXを使用します。以下にjQueryの例を示します(簡潔にするため)。フォームや非表示の入力は必要ありません

$.post("script.php", { total: getTotalFromSomewhere });
4
Phil