【问题标题】:Get Ajax variable from the PHP foreach loops从 PHP foreach 循环中获取 Ajax 变量
【发布时间】:2013-08-09 11:38:41
【问题描述】:

我有一个简单的 ajax(jquery 版本)脚本和非常短的 php 函数,它们可以正常工作,没有问题。 当我从表单输入中提交值时,ajax 将发送并从中获取结果 php 脚本,在本例中获取图书订单的总金额。 Ajax脚本和html部分如下:

     <script language="JavaScript">
   $(document).ready(function() {
   $("form").mouseout( function() {
      // get field value

      var qtyVal = $('#qty').val();
      // use HTTP GET get ajax 
        $.ajax({
        type: 'GET',
        url:  'getSunBody.php',
        data: { qty : qtyVal,
                 }, 
        success: function(data) {
           //get xml value
                    $('#result').html($(data).find('qty').text()); 
           $('#result1').html($(data).find('caution').text());   

        } 
      });    
      return false;
   });
});
</script>


<body>
Total price:<div id="result" class="box" style="height=350px;"></div><div id="result1" class="box" style="height=350px;"></div>
<form>
  <p>
    <label>quantity: </label>
    <input type="text" id="qty" name="qty"/> 
    <br/>
       <input type="submit" value="submit">
    total price:</p>
  <p>&nbsp;</p>
</form>

以下作为 xml 的 php 脚本也适用于上述 ajax 请求:

<?php
// XML document
header("Content-Type: text/xml");
header("Content-Type:text/html; charset=utf-8");
// get field values
$qty = (isset($_POST["qty"]) ) ? $_POST["qty"] : $_GET["qty"];

echo "<?xml version=\"1.0\" ?>";

echo "<datetime>"; 
echo "<qty>" . $qty*100 . "</qty>";

$total=$qty*100;
if ($total==0)
    echo "<caution>"."please input number!"."</caution>";
    else if ($total<=500)
    echo "<caution>"."you shoud buy more!"."</caution>";
    echo "";

echo "</datetime>";

?>

但是,当我将上述脚本与我的购物车 foreach 循环结合使用时,它不起作用,并且 ajax 脚本无法从表单输入区域获取变量。我不知道这是否是变量范围问题(全局或本地)?还是别的什么?

以下是我想要修复的全部脚本:

<script language="JavaScript">
$(document).ready(function() {
   $("form").mouseout( function() {
      // get value from the form

      var qtyVal = $('#qty').val();
      // get 
        $.ajax({
        type: 'GET',
        url:  'getSunBody.php',
        data: { qty : qtyVal,
                 }, 
        success: function(data) {
           // get XML value
           $('#result').html($(data).find('qty').text()); 
           $('#result1').html($(data).find('caution').text());   

        } 
      });    
      return false;
   });
});
</script>
</head>

<body>
<table border="1" align="center">
<tr>
  <th>no</th>
  <th>name</th>
  <th>price</th>
  <th>qty</th>
  <th>update</th>
</tr>
<?php
foreach( $_SESSION["psn"] as $i => $data ){
?>
<form action="sessionCartUpdate.php">
<input type="hidden" name="psn" value="<?php echo $_SESSION["psn"][$i];?>">
<tr>
  <td><?php echo $_SESSION["psn"][$i];?></td>
  <td><?php echo $_SESSION["pname"][$i];?></td>
  <td><?php echo $_SESSION["price"][$i];?></td>
  <td><input type="text" id="qty" name="qty" value="<?php echo $_SESSION["qty"][$i];?>"></td>
  <input type="submit" name="qty" 
  <td><input type="submit" name="btnUpdate" value="update" />
      <input type="submit" name="btnDelete" value="delete" />
      </td>
</tr>
</form>
<?php
}
?>
<tr><td colsan="5">total amount:<div id="result" class="box" style="height=350px;"></div><div id="result1" class="box" style="height=350px;"></div></td></td>
</table>
<p><a href="sessionProdList.php">continue to shop</a>
<p><a href="sessionCartToDb.php">Put your order</a>
</body>
</html>

如果有人能提供善意或可能的建议或建议,我将不胜感激? 我的目标是通过使用 ajax 将不同的数字(变量)放入“输入区域”(名称或 id 为“数量”)以获得总价格并在 div 框中显示结果(id="result ”或“结果1”)。

【问题讨论】:

  • id 应该是唯一的id="qty" 你也可以使用类
  • 非常感谢您的建议!

标签: php javascript jquery ajax


【解决方案1】:

您应该用 class 替换 id 属性,因为 id 在 dom 中应该是唯一的,并且使用 class 您可以执行循环以获取购物车中所有数量的商品

另一件事我注意到你已经为购物车中的每个项目制作了一个单独的表单,应该有一个包含多个字段的表单,也删除此行 &lt;input type="submit" name="qty" 它确实有意义

<form action="sessionCartUpdate.php">
<?php
foreach( $_SESSION["psn"] as $i => $data ){
?>

<input type="hidden" name="psn" value="<?php echo $_SESSION["psn"][$i];?>">
<tr>
  <td><?php echo $_SESSION["psn"][$i];?></td>
  <td><?php echo $_SESSION["pname"][$i];?></td>
  <td><?php echo $_SESSION["price"][$i];?></td>
  <td><input type="text" class="qty" name="qty[]" value="<?php echo $_SESSION["qty"][$i];?>"></td>

  <td><input type="submit" name="btnUpdate" value="update" />
      <input type="submit" name="btnDelete" value="delete" />
      </td>
</tr>

<?php
}
?>
</form>

<script language="JavaScript">
$(document).ready(function() {
   $("form").mouseout( function() {
var qtyVal =0;
$( ".qty" ).each(function() {
  qtyVal =qtyVal + parseInt($(this).val()); 
});      
      // get 
        $.ajax({
        type: 'GET',
        url:  'getSunBody.php',
        data: { qty : qtyVal,
                 }, 
        success: function(data) {
           // get XML value
           $('#result').html($(data).find('qty').text()); 
           $('#result1').html($(data).find('caution').text());   

        } 
      });    
      return false;
   });
});
</script> 

【讨论】:

  • 哇,太棒了!这是一个强大而可靠的解决方案!在您的帮助下,我的购物车现在可以顺利运行,没有任何问题!
  • 再次感谢您的努力和出色的解决方案!
【解决方案2】:
// get field values
$qty = (isset($_POST["qty"]) ) ? $_POST["qty"] : $_GET["qty"];

您可以使用 $_REQUEST 而不是同时使用 $_GET 和 $_POST,这将提供来自 POST 或 GET 的数据。

【讨论】:

  • 非常感谢您的及时答复!
猜你喜欢
  • 2013-08-12
  • 2015-11-27
  • 1970-01-01
  • 2017-08-03
  • 2014-05-27
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
相关资源
最近更新 更多