2011-11-09 9 views
0

AjaxとJqueryに関する問題があります。 私は<li>要素を束ね、Jqueryでソートすることができます。 li要素ごとに隠しフィールドもあります。これらの非表示フィールドの名前はすべてlist[]です。このようにして、PHPは隠しフィールドの内容を含む配列を作成します。 私は自動保存オプションを実装しようとしています。これは、30秒ごとにli要素の順序が自動的にmysqlデータベースに保存されることを意味します。 今までの私の試みはこれです:テストのためJquery経由でPHPスクリプトにJqueryの注文リストを送信するには?

$(document).ready(function(){ 
autosave(); 
}); 

function autosave() 
{ 
var t = setTimeout("autosave()", 500); 
    $.ajax( 
    { 
     type: "POST", 
     url: "autosave.php", 
     data: "list[]=" + list, 
     cache: false, 
      success: function(message) 
      { 
       $("#autosave").empty().append(message); 
      } 

    }); 
} 

autosave.phpだけでjqueryのが動作するかどうかだけで出力テキストを見ることでしょう。だから私は問題がdata: "list[]=" + listであることを知りました。これは私の値を隠しフィールドからautosave.phpに送ることはありません。

私の間違いは何ですか?どのように私はautosave.phpに配列リストを送ることができますか? phpheini

答えて

1

このようなlistを作成します。

var list = $("[name='list[]']").map(function(){ 
    return this.name + "=" + this.value; 
}).get().join("&"); 

次に割り当てるlist直接dataへ:

$.ajax({ 
    ... 
    data: list, 
    ... 
}); 

編集:これはあなたのためのレビューがあるなら、私を許して、しかし、のはに降りてみましょう基本。 HTTP POSTリクエストでは、ポスト本体はキー値のペアの集合として送信されます。キーと値は=で区切られ、ペアは&で区切られます。

firstName=Fred&lastName=Jones&town=Bedrock 

すでに理解したよう

は、PHPは、配列に投稿された要素を変換する必要があり、キー []サフィックスを得ました。 PHP、リスト1に(1、2、3)とlist2の( "A"、 "B"、 "C")を二つの配列を送信するには、自分の記事の本文は以下のようになります。

list1[]=1&list1[]=2&list1[]=3&list2[]=a&list2[]=b&list2[]=c 

を今、ときに$.ajaxを呼び出すと、dataは、ポストボディストリング、またはjQueryがポストボディストリングにシリアライズするオブジェクトのいずれかになります。 AFAIK、jQueryはオブジェクトを上記の文字列にシリアル化することができないので、私たちはそれを自分で作成する必要があります。フォームフィールドが既に正しく設定されていて、それらのフィールドをすべて送信したい場合、答えは簡単です:$("#myForm").serialize()は、あなたが望む投稿体の文字列を与えます。

$.ajax({ 
    ... 
    data: $("#myForm").serialize(), 
    ... 
}); 

1つの警告this postあなたは$("#myForm").serialize().replace(/%5b%5d/ig, "[]")を使用してアンエスケープ[]する必要があるかもしれません示唆、私はそれが本当に必要だかわからないということです。

.serialize()を使用しない場合は、手動で文字列を作成する必要があります。上記の私の最初の例のパターンに従ってください。key=valueのペアを&で区切って、キーの末尾に[]という接尾辞を持つ配列があることを確認してください。

+0

'data'は'名前 'と値のペアの集合で、'& 'で区切ってください。手動でその文字列を構築することもできますし、おそらく '$("#myForm ")。serialize()を使うこともできますが、エスケープした括弧を[この質問](http:// stackoverflow.com/questions/323044)。 – gilly3

+0

あなたの最初のコードスニペットまたは2番目のスニペットに&を入れなければなりませんか? 2番目のスニペットで2つのリストをどのように接続すればよいですか? data:list + list2 does not work – phpheini

+0

@phpheini - 私は自分の答えを更新しました。それは役に立ちますか? – gilly3

0

助け ため

おかげでMyListOfElementsがあなたの配列であり、listは、データを取得するために、あなたのPHPコードで使用する鍵である

dataType: 'json', 
data: { list:MyListOfElements }, 

を使用してみてください。

+0

この場合、それはデータです:{list:list}、それはありませんか? この方法ではうまくいきません。 – phpheini

関連する問題