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

时间:2015-12-07 15:10:14

标签: javascript php jquery ajax post

我有以下带有输入元素的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 ):< / p>

   $(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 = $(&#34; form&#34;)。serialize(); 发送到服务器的数据将是一个看起来像的字符串像这样的东西:

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

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

2. 如果有大量输入元素,每个元素都有自己唯一的名称,我们如何迭代(并避免使用$ _POST [&#39; input_name&#39;]每个元素单独 - > $ _POST [&#39; aster&#39;],$ _POST [&#39; rose&#39;]等等......)并计算 PHP中的总和

3. 如何将计算出的金额发送回客户端(f 从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();
 }

它有效 - 它显示总和......

4 个答案:

答案 0 :(得分:1)

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

CREATE OR REPLACE FUNCTION std_deviation(variadic inputs numeric[])
  RETURNS numeric AS
$BODY$
  SELECT stddev(v) FROM unnest(inputs) v
$BODY$
LANGUAGE SQL IMMUTABLE;

2迭代$ _POST数组

$asterPostVariable = $_POST['aster'];

3将其作为json数据回显

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
}

修改

2迭代$ _POST数组

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

答案 1 :(得分:1)

回答你的所有三个问题:

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

delItem

2。要遍历所有元素,请使用$_POST['element_name']; 语句。例如:

foreach

3。要将值返回给JavaScript,请将$sum = 0; foreach($_POST as $name => $value){ $sum += strtoint($value); } $final = array( sum => $sum ); json_encode一起使用。另外,请确保不要echo任何您不想返回的数据。例如:

echo

答案 2 :(得分:1)

您可以将每个花变量作为数组的索引:

<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

修改

如果您的帖子收到Parse.Cloud.define响应,则应检查您的PHP错误日志,因为您的脚本可能会在回显任何内容之前失败或退出。

答案 3 :(得分:-1)

  1. 您不必从jquery serialize方法中反编译PHP中的任何内容。如果序列化数据,如果使用GET方法ajax请求,则应将其作为查询参数发送给PHP,如果使用POST ajax请求,则应将其发送到vars。因此,在PHP中,您可以访问$ _POST [&#34; varname&#34;]或$ _GET [&#34; varname&#34;]等值,具体取决于请求类型。
  2. serialize方法只接受表单元素并将它们以字符串形式放置。 &#34; VARNAME = VAL&安培; VAR2 = val2的&#34;

    1. 迭代请求参数$ _REQUEST或$ _POST。
    2. 将其转换为json并将其回送给ex。 echo json_encode($ data);