我试图将数组从ajax传递给php(控制器)。
第二个代码有什么问题,因为第一个代码的var_dump($data)
返回适当的内容而第二个返回NULL?
FIRST。 GOOD。
function myFunction() {
var elementy = document.getElementsByClassName('inputISBN');
var data = elementy[0].value;
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
SECOND。 BAD
function myFunction() {
var elementy = document.getElementsByClassName('inputISBN');
var data = [];
data[elementy[0].name] = elementy[0].value;
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
THIRD。 UGLY
var elementy = document.getElementsByClassName('inputISBN');
undefined
var data = [];
undefined
data[elementy[0].name] = elementy[0].value;
"667"
第三个是在浏览器控制台中编写的socond代码中逐行显示的。并且它会返回应有的东西。
修改
并从此处提取数据:
<input type="number" class="inputISBN" size="2" name="exampleName"
value="666" onchange="myFunction()">
答案 0 :(得分:2)
将数组传递给PHP时,您希望包含数组指示符:[]
。我知道你需要一个对象:{}
。
function myFunction() {
var elementy = $('.inputISBN');
var data = {};
$.each(elementy, function(){
data[$(this).attr('name')] = $(this).val();
})
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
此时,您可能还想序列化数据(如@Adelphia的其他答案中所述):
'data': JSON.stringify(data)
jsFiddle:https://jsfiddle.net/Twisty/cw77ann7/
您可以在PHP中调用它:print_r($_POST['data']);
答案 1 :(得分:1)
您想将data
变量传递给PHP,这是一个数组,对吧?为什么不是data = JSON.stringify(data);
然后是PHP的$data = json_decode($_POST['data'], true);
function myFunction() {
var elementy = document.getElementsByClassName('inputISBN');
i = elementy.length;
data = [];
while(i--) data[elementy[i].name] = elementy[i].value;
data = JSON.stringify(data);
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}