当我将此函数返回的对象发布到ajax帖子中时,为什么会出现“未捕获的TypeError:非法调用”:
base.serialize = function()
{
var data
, depth = 0;
step = function(level, depth)
{
var array = [ ]
, items = level.children("li");
items.each(function()
{
var li = $(this)
, item = $.extend({}, li.data())
, sub = li.children("ol");
if (sub.length)
{
item.children = step(sub, depth + 1);
}
array.push(item);
});
return array;
}
data = step(base.$el, depth);
return data;
};
我要做的是将带有数据值的HTML树转换为数组,以便将排序顺序保存到数据库:
/*
* ------------------------------------------------------
* Liveflex Treeview
* ------------------------------------------------------
*/
var tree = $(".dd-list").liveflex_treeview({
handle : 'div.dd-handle'
, opencollapse : '.opencollapse'
, itemMoved : function(e)
{
var sort_array = e.serialize();
// Save order
$.post('/url_fetch/sort_posts', { 'sort_array' : sort_array }, function(data)
{
console.log('Data:' + data);
});
}
});
答案 0 :(得分:1)
您正在尝试发布包含DOM元素的对象。但DOM元素具有循环属性(例如,它们都指向窗口),有时包含无法获取的属性。它们不能被序列化为JSON(或者通过递归序列化属性的任何天真函数)。
您的解决方案可能是: