问题 将一组对象作为ajax发布数据发送?


我的总体目标是在页面上获取所有部分下拉菜单并将其发送给php文件进行处理。

现在,我在jQuery中这样做的方式是制作一个整体计划数组,然后将每个要更新的元素添加到该数组中。所以我有类似的东西:

var schedule = [];
var data = { 
   'user_id' : '12', 
   'day_of_week' : 'Monday',
    'when' : 'start',
    'time' : '12 AM'
 }
schedule.push(data);
var data = { 
   'user_id' : '13', 
   'day_of_week' : 'Tuesday',
    'when' : 'end',
    'time' : '12 AM'
 }
schedule.push(data);
// schedule would have two objects in it

显然是循环和东西。

因此,我的schedule数组中有两个对象,在本例中。

现在,是否可以将该计划数组用作ajax数据?如果我这样做,它不起作用:

$.ajax({
  url: 'http://something.com/ajax',
  data: schedule,
  type: 'POST'
});

但是,如果我改为它 schedule[0] 它工作得很好,但显然只是在schedule数组中的第一件事。


11300
2018-04-21 16:48


起源

删除''..schedule是一个变量,而不是一个字符串。此外,jQuery会将您的数组编码为您需要在服务器上解码的JSON对象。 - gpasci
除非我弄错了,否则Schedule不是一个数组数组。它是一个对象数组,如 data 是一个对象。 - xbonez
@Truth:除了我在ajax上非常新的事实之外,没有具体原因。 - Ben
有意思......你有什么精确版本的jQuery吗? - Chris Baker
哦,好主人,我要在角落里哭泣。一些1.7.2中的7如何被删除所以它只是从谷歌抓到1.2:/。现在工作!是时候停止今天的工作了。 - Ben


答案:


确保您使用的是正确版本的jQuery。在早期版本中,你必须通过一个刺痛;新版本使用“智能猜测” data 变量。你可以明确地告诉jQuery你用它传递一个javascript对象 dataType 参数,或者你可以让jQuery搞清楚。

文档

jQuery.ajax()  - http://api.jquery.com/jQuery.ajax/


3
2018-04-21 19:59





data 属性应该是一个对象。

你能做的是:

$.ajax({
  url: 'http://something.com/ajax',
  data: {schedule: schedule},
  type: 'POST'
});

所以,如果你在PHP中收到这个,你就有了 $_POST["schedule"]。这与JavaScript中的完全相同。

哦,是的,我忘记了......也看看了 .serialize() 和 .serializeArray()


11
2018-04-21 19:27



当前的jQuery文档声明它可以是对象,字符串或数组。 - Brad Bird


将其作为JSON传递:

$.ajax({
  url: 'http://something.com/ajax',
  data: {schedule: schedule},
  type: 'POST',
  dataType: 'JSON'
});

它会将一个JSON编码的字符串发送到服务器,服务器端语言可以解析。 (在PHP中,它完成了 json_decode())。


2
2018-04-21 17:04



我传给json_deocde()的是什么? $ _POST ['schedule']? - Ben
@Ben:是的。 schedule 将包含JSON字符串。 - xbonez
无论哪种方式,我一无所获。我试过了 type: 'POST' 和 type: 'JSON' 无论是数据组合还是我都得到一个空值。可能有什么问题?如果我做了 console.log(schedule) 在ajax部分之前,我可以看到我所有的物体,所以我知道它们就在那里。 - Ben
你知道功能的替代品吗? json_decode() 对于python ?? - Aashish Kumar