Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $.post原因单击事件递归_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript $.post原因单击事件递归

Javascript $.post原因单击事件递归,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有几行产品供客户选择。这些行具有“product line”类。单击一行时,我想通过切换“product checked”类向用户显示它已(取消)选中,然后发送一条带有ID all checked行的POST消息。为此,我编写了以下代码: $(“.productline”)。单击(在ProductLineClick上); 函数onProductLineClick(e){ $(此).toggleClass(“已检查产品”); updatePrice(); } 函数updatePrice(){

我有几行产品供客户选择。这些行具有“product line”类。单击一行时,我想通过切换“product checked”类向用户显示它已(取消)选中,然后发送一条带有ID all checked行的POST消息。为此,我编写了以下代码:


$(“.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!");
}