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

出力に表示されるこれらの関数は、jQuery からではなく、Prototype JS からのものです。

配列をシリアル化するために呼び出している関数の何かobj.hasOwnProperty(n)が、チェックせずにそうしています。

key: valueただし、PHP はフォーム パラメータが配列ではなくペアであることを期待します。単一のキーに対して複数の値を渡すための広く受け入れられている標準はありません。そのため、最初に配列を手動でシリアル化することを移植可能なアプローチにすることができます。次に例を示します。

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

$_REQUEST['values']次に、PHP コードでJSON デコードを実行します。

すべてがPHPになることがわかっている場合は、次を使用できます。

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

これは、jQuery に依存して、values[]キーを PHP と互換性があることが知られている形式に変換します。

于 2013-03-28T15:40:42.107 に答える