jQuery&PHP:计算总和并将其发送回客户端

我有以下带有输入元素的HTML表单:

<form id="forma" name="forma" method="post">
   <div id="oblock">
      <div class="dtable">
        <div class="drow" id="drow1">
            <div class="dcell">
                <label for="aster">Aster:</label>
                <input type="text" id="aster" name="aster" value="0" stock="10" price="2.99" required>
            </div>
            <div class="dcell">
                <label for="daffodil">Daffodil:</label>
                <input type="text" id="daffodil" name="daffodil" value="0" stock="12" price="1.99" required >
            </div>
            <div class="dcell">
                <label for="rose">Rose:</label>
                <input type="text" id="rose" name="rose" value="0" stock="2" price="4.99" required>
            </div>
        </div>
    </div>
  </div>
  <div id="buttonDiv">
     <button type="submit">Place Order</button>
  </div>
</form>

我使用jQuery serialize()从表单收集数据并使用$ .post发送到服务器端(在我的情况下是test.php ):

   $(function() {
        $("button").click(function(e) {
            var formData = $("form").serialize();
            $.post("test.php", formData, processServerResponse);
            e.preventDefault();
        });
    });
    function processServerResponse(data) {
         $("div.dcell").hide();
         $("#buttonDiv").append('<div>'+data.total+'</div>');
         $("#buttonDiv button").remove();
    }

如果我理解正确 - var formData = $(“form”)。serialize(); 发送到服务器的数据将是一个字符串,如下所示:

"aster":"2"&"daffodil":"5"&"rose":"0"

1.如何在PHP中访问这些值?

2.如果有大量的输入元素都有自己的唯一名称,我们如何迭代(并避免为每个元素分别使用$ _POST ['input_name'] - > $ _POST ['aster'],$ _POST ['玫瑰']等等...)并计算在PHP中的总和?

3.如何将计算的总和发送回客户端( 从PHP到jQuery /客户端 )?

EDIT2:

根据我在这里收到的一些答案,我尝试了以下方法:

<?php
    $sum = 0;
    foreach ($_POST as $name=>$value) {
        $sum += (int)$value;
    }
    $_POST['total'] = $sum;
    echo json_encode($_POST['total']);

我的客户端代码(jQuery):

function processServerResponse(data) {
        $("div.dcell").hide();
        $("#buttonDiv").append('<div>'+data+'</div>');
        $("#buttonDiv button").remove();
 }

它的工作原理 - 它显示了总和...


1用$ _POST ['variable-name'];

$asterPostVariable = $_POST['aster'];

2迭代$ _POST数组

foreach ( $_POST as $key => $val )
{
  // Do calculation, your value from input element is in $val
  $sum += $val;
  // You could also check your $key if you don't want to sum all post variables
}

3将其作为json数据回显

echo json_encode( ['sum' => $calculatedSum] );

编辑

2迭代$ _POST数组

foreach ( $_POST as $key => $val )
{
  // You could also check your $key if you don't want to sum all post variables. This solution is based on that your form elements that you want to calculate are named with the initial fl_
  if ( substr($key, 0, 3) == 'fl_' )
    $sum += $val;

}

要回答你所有的三个问题:

1.要访问这些值,可以使用超全局变量。 例如:

$_POST['element_name'];

2.遍历所有元素,使用foreach语句。 例如:

$sum = 0;
foreach($_POST as $name => $value){
    $sum += strtoint($value);
}
$final = array(
    sum => $sum
);

3.要将值返回给JavaScript,请将json_encodeecho一起使用。 另外请确保不要echo您不想返回的任何数据。 例如:

echo json_encode($final);

你可以让每个花变量都是数组的索引:

<form id="forma" name="forma" method="post">
   <div id="oblock">
      <div class="dtable">
        <div class="drow" id="drow1">
            <div class="dcell">
                <label for="flowers[aster]">Aster:</label>
                <input type="text" id="flowers[aster]" name="flowers[aster]" value="0" stock="10" price="2.99" required>
            </div>
            <div class="dcell">
                <label for="flowers[daffodil]">Daffodil:</label>
                <input type="text" id="flowers[daffodil]" name="flowers[daffodil]" value="0" stock="12" price="1.99" required >
            </div>
            <div class="dcell">
                <label for="flowers[rose]">Rose:</label>
                <input type="text" id="flowers[rose]" name="flowers[rose]" value="0" stock="2" price="4.99" required>
            </div>
        </div>
    </div>
  </div>
  <div id="buttonDiv">
     <button type="submit">Place Order</button>
  </div>
</form>

然后你可以遍历这个数组:

foreach($_POST['flowers'] as $flowerType => $count){
    // do something
}

我会尽量避免迭代整个$_POST数组,因为您可能希望稍后在此表单中添加更多变量(与花无关)。

你可以使用echo json_encode($result); 当它发回给客户端时

编辑

如果你对你的帖子收到一个undefined回复,你应该检查你的PHP错误日志,因为在回应任何东西之前,你的脚本可能会失败或退出。

链接地址: http://www.djcxy.com/p/74369.html

上一篇: jQuery & PHP: Calculate the sum and send it back to client

下一篇: AngularJS does not send hidden field value