0

我有一个附加数据,其中包含这样使用的 ID 列表:

//Create
$('#element').data('list', new Array());
//Add a value into data
$('#element').data('list').push(id);
//Remove an element
var inArray = jQuery.inArray(id, jQuery('#element').data('list'));
if(inArray != -1) jQuery('#element').data('list').splice(inArray, 1);

我想通过使用原型的 Ajax 调用将此数据发送到 PHP。
看起来像这样:[1,2,3]将被替换为jQuery('#filmsList').data('listFilms')

ajax: {
   method: 'post',
   parameters : {'values' : [1,2,3]},
   evalScripts: true,
}

发布的参数是:

values  1
values  2
values  3

所以在PHP中我只检索

array(1) {
  ["values"] => string(1) "3"
}

我究竟做错了什么?

如果我不将数组放入对象parameters : [1,2,3]中,我会检索很多附加到我的数据的函数,如下所示:

array(40) {
[0] => string(6) "1"
[1] => string(6) "2"
[2] => string(6) "3"
["each"] => string(233) "function each(iterator, context) {
  var index = 0;
  try {
    this._each(function(value) {
      iterator.call(context, value, index++);
    });
  } catch (e) {
    if (e != $break) throw e;
 }
  return this;
}"
["eachSlice"] => string(291) "function eachSlice(number, iterator, context) {
 var index = -number, slices = [], array = this.toArray();
  if (number < 1) return array;
  while ((index += number) < array.length)
   slices.push(array.slice(index, index+number));
  return slices.collect(iterator, context);
}"
["all"] =>......
4

1 回答 1

2

输出中出现的那些函数来自 Prototype JS,而不是来自 jQuery。

您调用以序列化数组的函数中的某些内容正在执行此操作而不检查obj.hasOwnProperty(n).

但是 - PHP 会期望您的表单参数是key: value成对的,而不是数组。为单个键传递多个值没有广泛接受的标准,因此一种可移植的方法可能是首先手动序列化数组,例如:

parameters: { 'values': JSON.stringify(myArray) }

然后$_REQUEST['values']在 PHP 代码中执行 JSON 解码。

如果您知道它只是每个都将是 PHP,您可以使用:

parameters: { $.param({ 'values[]': myArray }) }

它依赖 jQuery 将values[]密钥转换为已知 PHP 兼容的格式。

于 2013-03-28T15:40:42.107 回答