2012-05-11 12 views
1

$('#table_content').sortable('serialize')はconsole.infoでテストしたので配列を返します。私がしたいのは、その式の値をポストリクエストのデータとして使うことですが、その結果をコールバックのデータとして別のAjaxリクエストに渡すことを望みます。私はこれを行うことができると思ったのは、.postのデータ引数として$('#table_content').sortable('serialize')を置くだけですが、これを行うと、パラメータは "undefined = undefined"となります。jqueryの結果を投稿リクエストで渡す(シリアル化)

jQuery -> 
    ids = $('#table_content').sortable('serialize') 
    console.info(ids) 

    $('#tasks_table').load('/dashboard #tasks_table', null, -> $.post('/tasks/sort', $('#table_content').sortable('serialize'), ->location.reload())) 

undefined=undefined 

なぜこのようなことが起こっているのですか?もし、私がを$('#table_content').sortable('serialize')の代わりに渡すと、それは動作しますが、前回のajaxリクエストが実行された後は、$('#table_content').sortable('serialize')の値にしかなりません。私はIDを使用する場合は、それが価値だあなたの例から$('#tasks_table').load

答えて

1

を呼び出した後に変更を反映していない、あなたが(もちろん、そうでないかもしれないDIV要素)をロードした後、以下の構造を持つアップを終了するようだ:

<!-- #tasks_table you call .load() upon --> 
<div id="tasks_table"> 
    <!-- #tasks_table that is loaded --> 
    <div id="tasks_table"> 
    </div> 
</div> 

は、ロードページフラグメントはそれらを置き換えるものではありませ、マッチしたセットの要素にを(ラッピング要素を含む)ロードされたフラグメントを挿入することに注意してください!

おそらく、負荷の#tasks_tableの子供を抽出する必要があります。この約1

$('#tasks_table').load('/dashboard #tasks_table > *', ...); 

わからないのが、がソート可能なプラグインを呼び出す前にを初期化するために、あなたは多分あるでしょう "ロードされたコンテンツに対してメソッドをシリアライズします。

$('#tasks_table').load('/dashboard #tasks_table', null, function() { 
    var ids = $('#table_content') 
     .sortable() // init first 
     .sortable('serialize'); // then call 'serialize' 
    $.post('/tasks/sort', ids, function() { 
     location.reload() 
    }); 
}); 
+0

ありがとうございます!私はちょうどコールバック関数内で自分のID変数を初期化する必要がありました。それは完璧な意味合いがあります。 location.reload()関数がページを再読み込みし、ポストリクエストを行った後に変更された新しいデータが表示されない点を除いて、これは素晴らしい結果です。代わりに手動でページをリロードする必要があり、変更が反映されているだけです。ポストリクエストのコールバック機能は、ポストリクエストが正常に行われた後にのみ実行されると考えていたので、これはちょっと奇妙なようです。このアイデアは何ですか? – yiinewbie

+0

成功コールバックであるため、成功時に呼び出されます。投稿されたデータは確かですか?サーバー側で何をしているのですか?また、後でページ全体をリロードする場合はなぜajaxを使用しますか? –