创建和循环json对象

时间:2016-09-21 10:03:01

标签: javascript php jquery json ajax

我正在尝试在js中创建一个json对象,使用ajax将其发送到php页面并在php页面中循环它。

我的代码如下

表单页

<html>
    <body>
    Input 1: <input type="text" data-id="1" data-old="30"/><br>
    Input 2:<input type="text" data-id="2" data-old="40"/><br>
    Input 3:<input type="text" data-id="3" data-old="50"/><br>

    <input type="text" id="max" value="3" hidden/>

    <button type="button" id="proceed">Go</button>
    </body>
</html>

JS

$("#proceed").on("click",function(){
var num=$("#max").val();
var array=[];  //[] or {} ??
for(i=1;i<=num;i++){
    var old=$('input[data-id="'+i+'"]').data("old");
    var new=$('input[data-id="'+i+'"]').val();
    var deduct;
    if(new!==old && new!==""){
        deduct=old-new;
        array.push({"pid":i,"deduct":deduct});
    }

    var updateArray = JSON.stringify(array);
    $.ajax({
        type:"POST",
        url:"../control/stock-c.php",
        data:{updateArray:updateArray, func:"manualSync"},
        dataType:"json",
        success:function(){
            alert("yay");
        }        
    });

}
});

股票c.php

require_once '../model/stock-m.php';
$updateArray=$_POST["updateArray"];
$array=  json_decode($updateArray);
$obj=new Stock();
foreach($array as $obj1){
    $result=$obj->deductMainstock($obj1->pid,$obj1->deduct);
}
return $result;

库存类存在于stock-m.php中,我可以确认方法deductMainstock()有效(包括mysqli更新查询)。

然而,当运行我的代码时,似乎deductMainStock()似乎没有工作。我知道有很多代码,所以为了保持简单,我需要了解以下内容:

  1. 在js文件中创建的var数组是否正确完成?我需要创建一个json对象,使用ajax以下列格式发送详细信息:
  2. 阵列= [{&#34; PID&#34 = 1,&#34;扣除&#34; = a_value},{&#34; PID&#34; = 2&#34;扣除&#34; = another_value},{&#34; PID&#34; = 3&#34;扣除&#34; = another_value}]

    1. js文件中的ajax调用是否正确?我使用JSON.stringify()将上面的数组转换为json,以便通过ajax发送。

    2. 我是否在stock-c.php中正确地遍历数组?我需要发送&#34; pid&#34;并且&#34;扣除&#34;作为deductMainstock()方法的数字变量。

1 个答案:

答案 0 :(得分:1)

  1. 请将变量名称var new更改为其保留关键字以外的其他名称。
  2. var updateArray = JSON.stringify(array);您无需对数组进行字符串化。
  3. 将ajax调用移出for循环。
  4. 以下是更新后的代码

    <强>脚本

    <script>
    $("#proceed").on("click",function(){
      var num=$("#max").val();
      var array=[];  //[] or {} ??
      for(i=1;i<=num;i++){
          var old=$('input[data-id="'+i+'"]').data("old");
          var new_val=$('input[data-id="'+i+'"]').val();
          var deduct;
          if(new_val!==old && new_val!==""){
              deduct=old-new_val;
              array.push({"pid":i,"deduct":deduct});
          }
    
      }
      if(array.length){
         $.ajax({
           type:"POST",
           url:"../control/stock-c.php",
           data:{updateArray:array, func:"manualSync"},
           dataType:"json",
           success:function(){
             alert("yay");
           }        
         });
      }
    
    });
    </script>
    

    <强> PHP

    发布值将是数组,因此请从代码中删除json_decode

    <?php 
    require_once '../model/stock-m.php';
    $array = $_POST["updateArray"];
    $obj = new Stock();
    foreach ($array as $obj1) {
        $result = $obj->deductMainstock($obj1->pid,$obj1->deduct);
    }
    return $result;
    
    ?>
    

    希望这会有所帮助。