当前位置: 首页 > 面试题库 >

从PHP foreach循环获取Ajax变量

游鸣
2023-03-14
问题内容

我有一个简单的ajax(jQuery版本)脚本和一个非常短的php函数,它们工作正常而没有问题。当我从表单输入are中提交值时,ajax会发送并从php脚本中获取结果,在这种情况下,该ajax可以获取预定的总金额。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 ”或“ result1”)。


问题答案:

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

我注意到的另一件事是,您为购物车中的每个商品都制作了一个单独的表单,应该有一个包含多个字段的表单,也请删除此行<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>


 类似资料:
  • 问题内容: 这里发生了什么?我正在尝试创建功能列表: 这没有达到我的期望。我希望列表像这样: 但是列表中的所有功能似乎都是相同的,并且将固定值设置为9: 有任何想法吗? 问题答案: python中的lambda是闭包…。在计算lambda之前,不会对您提供的参数进行求值。那时,i = 9,因为您的迭代已完成。 您正在寻找的行为可以通过functools.partial实现

  • 问题内容: 从 尚未在Dockerfile中声明的Docker 容器获取环境变量的最简单方法 是什么 ? 例如,通过某个会话设置的环境变量? 我可以做到,但是我更喜欢只返回值的东西。 我尝试使用,但是替换似乎发生在容器外部,因此我没有从容器中获取env var,而是从我自己的计算机中获取了env var。 谢谢。 问题答案: 在容器中运行以使变量替换发生在容器中的正确方法是:

  • 问题内容: 这是我在这里的第一篇文章,我希望有人能够为我提供帮助。在过去的一周中,我一直在从事我的项目。显然,我坚持了最后一部分。 因此,基本上,我进行了AJAX聊天,当我提交一行时,我将发送整个行(使用Post方法)以进行分析(发送到名为analysis.php的文件中)。 正在对聊天行进行分析,并通过在MySql数据库上进行查询来找到所需的变量。 现在我需要做的就是将此变量与JQuery-AJ

  • 问题内容: 我正在使用带有node_redis的Node.js,并遍历一个对象并在Redis中查找数据,然后返回结果。 我有这样的设置: 问题在于,它会在完成对redis的调用之前循环通过。因此,在实际更新总值之前,将调用回调。由于延迟,它似乎也跳过了一些项目。 有没有更好的方法来解决这个问题? 谢谢! 编辑: 好的,所以我这样更新了它: 这似乎可行,它在适当的时间触发了回调,但是似乎只有最后一个

  • 问题内容: 我一生无法理解为什么我无法在while循环之外阅读postPrioity。我尝试过“ export postPrioity =“ 500””仍然无法正常工作。 有任何想法吗? -或在计划文字中- 输出:(我在files.txt中只有3个文件名) 问题答案: 管道操作员创建一个子外壳,请参阅BashPitfalls和BashFAQ。解决方案:不要使用,反正毫无用处。

  • 我的代码是: 这似乎不会在我的变量列表中循环。有什么想法吗?提前致谢