在post请求中传递来自jquery .sortable('serialize')的结果

时间:2012-05-11 23:44:59

标签: jquery jquery-ui coffeescript

所以我知道$('#table_content').sortable('serialize')返回一个数组,因为我用console.info测试了它。我想要做的是使用该表达式的值作为post请求中的数据,但我希望它的结果作为回调中的数据传递给另一个ajax请求。我想我可以通过将$('#table_content').sortable('serialize')作为.post的数据参数来实现,但是当我这样做时,根据firebug,参数是“undefined = undefined”。

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

有关为何发生这种情况的任何想法?请注意,如果我在ids的位置传递$('#table_content').sortable('serialize'),它可以正常工作,但只有在前一个ajax请求运行后我才想要$('#table_content').sortable('serialize')的值。如果我只使用id,那么在调用$('#tasks_table').load

之后,它的值不会反映出更改

1 个答案:

答案 0 :(得分: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的子代:

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

不确定这个,但您可能需要初始化可排序的插件才能调用&#39;序列化&#39;加载内容的方法。

$('#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()
    });
});