今天在写一个购物车的发票功能,由于每个商家都需要有一个发票抬头,因此我用表单来标记
其中k代表的是店铺id,然后通过ajax把该数组发送到PHP后台去处理,最初我的JS是这样写的:
var data = {};
var invoice_name = $("input[name=invoice_name]");
data.invoice_name = invoice_name;
$.ajax({
type:'post',
url:ApiUrl+'/index.php?act=member_buy&op=buy_step2',
data:data,
dataType:'json',
success:function(result){
//返回处理
}
});
然后我在PHP进行打印老是为空,后面通过研究发现,如果有两个店铺id为1和2的店铺时,表单会变成:
经过高人指点后发现,jquery选择器有问题,$("input[name=invoice_name]")这个选择器表示name恰好为“invoice_name”的文本框,应该这样写:
$("input[name^=invoice_name]");
表示为所有name类似invoice_name的文本框,改好了之后发现PHP只能接收一个发票抬头的值,经过研究发现,默认这样传输只能传数组里第一个值过去,因此应该要在js中遍历invoice_name的值存为数组再发送,正确写法应该这样:
var data = {};
var invoice = [];
$("input[name^=invoice_name]").each(function(a_Idx, a_Elmt) { invoice.push(a_Elmt.value); });
data.invoice_name = invoice;
$.ajax({
type:'post',
url:ApiUrl+'/index.php?act=member_buy&op=buy_step2',
data:data,
dataType:'json',
success:function(result){
//返回处理
}
});
现在到了php端发现$_POST['invoice_name']已经是一个数组了,数据都已经传输过来了。
花费了两天研究这问题,百度之后发现这个问题提问挺少的,不敢独享,赶紧和大伙分享分享!