Javascript $.post原因单击事件递归
我有几行产品供客户选择。这些行具有“product line”类。单击一行时,我想通过切换“product checked”类向用户显示它已(取消)选中,然后发送一条带有ID all checked行的POST消息。为此,我编写了以下代码:Javascript $.post原因单击事件递归,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有几行产品供客户选择。这些行具有“product line”类。单击一行时,我想通过切换“product checked”类向用户显示它已(取消)选中,然后发送一条带有ID all checked行的POST消息。为此,我编写了以下代码: $(“.productline”)。单击(在ProductLineClick上); 函数onProductLineClick(e){ $(此).toggleClass(“已检查产品”); updatePrice(); } 函数updatePrice(){
$(“.productline”)。单击(在ProductLineClick上);
函数onProductLineClick(e){
$(此).toggleClass(“已检查产品”);
updatePrice();
}
函数updatePrice(){
变量ID=$(“.product checked”)
.map(函数(){
返回$(此).data(“id”);
});
$.post(“/Controller/Action”,{'productIds[]':ids});
警惕(“嗨!”);
}
错误与地图功能有关。jQuery中有两个映射函数
对
如文档中所述,第一个生成一个包含返回值的新jQuery对象,而第二个将数组或对象中的所有项转换为新的项数组
序列化新创建的对象并在ajax请求中传递它是行不通的,因为其中包含递归引用。[谢谢@ADyson]
我为此创建了一个提琴:我还得到了一个“太多递归”错误。我现在正在研究这个问题,我认为是试图序列化jQuery对象(是.map()的结果)导致了这个问题。您打算在
ids
对象中发送什么?我猜它不是一个完整的jQuery数组。这是因为另一个版本的.map()返回一个完整的jQuery对象,而不是一个标准数组,将对象序列化为文本以包含在HTTP请求中是行不通的,因为其中包含递归引用。假设您的答案以服务器期望的格式生成ids
数据,那么这可能是正确的选择。您是正确的。有两个映射函数。我会尽力正确地解释我的答案。谢谢你是的,就是这样!我太天真了,$.post行使它意识到ID的序列化实际上导致了这个问题。所以我用错地图了。我把它改成了$.map,现在一切都好了。谢谢
$(".product-line").click(onProductLineClick);
function onProductLineClick(e) {
$(this).toggleClass("product-checked");
updatePrice();
}
function updatePrice() {
var ids = jQuery.map($(".product-checked"), function(element, index) {
return $(element).data("id");
});
console.log(ids);
$.post("/Controller/Action", {
'productIds': ids
});
alert("Hi!");
}