我正在尝试从jquery帖子的响应中构建一个数组。我有以下代码:
categories_names = [];
$(categories).each(function(index, category_id) {
$.post('/modules/blog/add_post_categories', {post_id:result.result, category_id:$(category_id).val()},
function(result)
{
categories_names.push = result;
});
}).promise().done(function() {
var final_cats = categories_names.join("");
console.info(final_cats);
});
post请求将类别id插入表中,并返回格式为<li>Category Name here</li>
的类别的名称,以便在构建数组后输入所有类别(通过前面的表单中的复选框)在数据库中,数组可以作为html连接并插入到最终视图中。目前,代码只是在控制台中打印出来,正如您可能已经猜到的那样,它会返回(an empty string)
我知道这很可能是一个范围问题,因为那个javascript领域仍然让我感到困惑,所以我希望有人可以对它有所了解。
答案 0 :(得分:3)
您的.promise().done(...)
没有按照您的想法行事。它只是立即解析,因为您正在迭代的元素上没有动画。另外,[].push
的语法错误。
var defArr = $(categories).map(function(index, category_id) {
return $.post('/modules/blog/add_post_categories', {post_id:result.result, category_id:$(category_id).val()});
}).get();
$.when.apply(null,defArr).done(function() {
//var categories_names = [];
//for (var i = 0; i < arguments.length; i++) {
// categories_names.push(arguments[i][0]);
//}
var categories_names = $.map(arguments,function(i,arr) {
return arr[0];
});
var final_cats = categories_names.join("");
console.info(final_cats);
});
答案 1 :(得分:0)
categories_names.push = result;
您可以尝试将其更改为
categories_names.push(result);
因为push是一种方法,而不是变量。