我正在尝试在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()似乎没有工作。我知道有很多代码,所以为了保持简单,我需要了解以下内容:
阵列= [{&#34; PID&#34 = 1,&#34;扣除&#34; = a_value},{&#34; PID&#34; = 2&#34;扣除&#34; = another_value},{&#34; PID&#34; = 3&#34;扣除&#34; = another_value}]
js文件中的ajax调用是否正确?我使用JSON.stringify()将上面的数组转换为json,以便通过ajax发送。
我是否在stock-c.php中正确地遍历数组?我需要发送&#34; pid&#34;并且&#34;扣除&#34;作为deductMainstock()方法的数字变量。
答案 0 :(得分:1)
var new
更改为其保留关键字以外的其他名称。 var updateArray = JSON.stringify(array);
您无需对数组进行字符串化。 for
循环。 以下是更新后的代码
<强>脚本强>
<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;
?>
希望这会有所帮助。