首页 > JS专栏 > 如何使用ajax向PHP端发送数组数据?
2015
05-17

如何使用ajax向PHP端发送数组数据?

今天在写一个购物车的发票功能,由于每个商家都需要有一个发票抬头,因此我用表单来标记

<input type="text" name="invoice_name[k]"/>

其中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的店铺时,表单会变成:

<input type="text" name="invoice_name[1]"/>
<input type="text" name="invoice_name[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']已经是一个数组了,数据都已经传输过来了。

花费了两天研究这问题,百度之后发现这个问题提问挺少的,不敢独享,赶紧和大伙分享分享!


留下一个回复