jQuery 每个循环将数据推送到 JSON 对象

jQuery Each Loop to push data into JSON Object

任何人都可以建议我在这里做错了什么。我在屏幕上有几个元素 class .cp_select。我需要遍历它们并获取“x”和“y”的属性。这本身就可以正常工作。然后我需要 assemble 一个 JSON obj 和一个子数组子 positions 并将每个循环 x/y 集推入其中。然后我将 PHP 中的数组与 json_decode() 一起使用,遍历子 positions 并在 PHP 端处理它。我就是想不通。有什么想法吗?

$(".pix_select_btn").click(function() {
    
    var poz = {}
    var poz_xy = {}
    $(".cp_select").each(function() {
        
        var pix = $(this)
        poz_xy = {"x" : pix.attr("x"), "y" : pix.attr("y")};
        poz['positions'].push(pos_xy)
                    
    });
    alert(JSON.stringify(poz))
    console.log();
})

您必须先创建数组,然后才能将其压入。

$(".pix_select_btn").click(function() {

  var poz = {positions: []}
  $(".cp_select").each(function() {

    var pix = $(this)
    var poz_xy = {
      "x": pix.attr("x"),
      "y": pix.attr("y")
    };
    poz.positions.push(pos_xy)

  });
  console.log(JSON.stringify(poz));
})

您也可以使用 map() 来简化它。

$(".pix_select_btn").click(function() {

  var poz = {
    positions: $(".cp_select").map(function() {
      var pix = $(this)
      return {
        "x": pix.attr("x"),
        "y": pix.attr("y")
      };
    }).get(); // .get() converts from jQuery object to array
  }
  console.log(JSON.stringify(poz));
})

请记住,PHP 运行s 在服务器和 JS 运行 在客户端,所以你不能在 PHP 中使用 var poz。

您需要发送一个 XHR 请求来捕获服务器端的值。