如何让jQuery AJAX将.map函数var值作为JSON字符串

时间:2016-06-29 03:41:45

标签: javascript php jquery json ajax

在下面的选项A的示例中,当回显帖子数据时,PHP脚本发布结果为undefined。但与console.log同时显示:[Object { set_capture="resize", set_unknown="unknown"}]。我想知道选项A中的.map函数或ajax代码有什么问题?对于选项B,删除.map函数后它可以正常工作。我错过了什么?

HTML表格:

<form action="myphp.php" method="post" name="form-foo">
    <input type="radio" id="r1" class="set-img" name="set_capture" value="resize" />
    <input type="radio" id="r2" class="set-img" name="set_capture" value="original" />
    <input type="checkbox" id="r3" class="set-img" name="set_unknown" value="unknown" />
    <input type="submit" id="submit" name="submit" value="Save" />
</form>

选项A:

$(function() {
  $("#submit").on("click", function() {
    var radioValues = $('#form-foo').map(function() {
      return {
        set_capture: $('input[name="set_capture"]:checked').val(),
        set_unknown: $('input[name="set_unknown"]:checked').val()
      };
    }).get();
    console.log(radioValues);
    //var formData = JSON.stringify(radioValues);
    var formData = radioValues;
    var formURL = $("#form-foo").attr("action");
    console.log(formData);
    $.ajax({
      url: formURL,
      type: "POST",
      data: formData,
      cache: false,
      dataType: "json"
    }).done(function(data) {
      // more codes
    }, "json");
    return false;
  });
});

选项B:

$(function() {
  $("#submit").on("click", function() {
    var capture = $('input[name="set_capture"]:checked').val();
    var unknown = $('input[name="set_unknown"]:checked').val();
    var formData = {
      set_capture: capture,
      set_unknown: unknown
    };
    var formURL = $("#form-foo").attr("action");
    console.log(formData);
    $.ajax({
      url: formURL,
      type: "POST",
      data: formData,
      cache: false,
      dataType: "json"
    }).done(function(data) {
      // more codes
    }, "json");
    return false;
  });
});

2 个答案:

答案 0 :(得分:1)

.map总是以数组形式返回.Ajax数据格式是对象{}因此它将在POST中未定义。要解决此问题,您需要添加formdata

的索引0
$.ajax({
      url: formURL,
      type: "POST",
      data: formData[0], //here add index 0 
      cache: false,
      dataType: "json"
    }).done(function(data) {
      // more codes
    }, "json");
    return false;
  });
  

注意:数据永远不会将未定义的值传递给服务器帖子,因此如果您没有检查输入或复选框,它将不会发布任何内容......

答案 1 :(得分:0)

Ajax data必须是数组。 EX:{&#34;捕获&#34;:123,&#34; unknow&#34;:456}。

使用选项A formData是[对象]而非数组,因此无效。

据我所知,抱歉,如果错了!