【问题标题】:AJAX call is only sending last item, and not entire arrayAJAX 调用仅发送最后一项,而不是整个数组
【发布时间】:2011-07-27 15:10:02
【问题描述】:

这是我的 AJAX 调用:

$(".all_of_union").live("click", function(){
      id = window.location.href.split("/")[5]

      var data = {};
    data.value = $(".union input").map(function(){
        return $(this).val();
    }).get();
    data.type = 'zip';

    $.ajax({
        type: "POST",
        url: "/admin/emails/" + id + "/distributions",
        dataType: "script",
        data: data
    });
});

如果我在控制台中执行alert(data.value),那么它会正确显示所有邮政编码。但是在我的 Rails 应用程序中仔细选择了我的断点,当它到达控制器时,实际上只显示最后一个邮政编码。

即使我像这样发送 AJAX 调用:

$.ajax({
      type: "POST",
      url: "/admin/emails/" + id + "/distributions",
      dataType: "script",
      data: { value: ["07005", "07034", "07035", "07045", "07046", "07054", "07058", "07082", "07405", "07435", "07438", "07440", "07444", "07457", "07460", "07801", "07803", "07806", "07828", "07830", "07834", "07836", "07840", "07847", "07849", "07850", "07852", "07853", "07856", "07857", "07866", "07869", "07876", "07885", "07920", "07927", "07928", "07930", "07931", "07932", "07933", "07934", "07935", "07936", "07940", "07945", "07946", "07950", "07960", "07976", "07980", "07981", "07999", "07802", "07842", "07845", "07870", "07878", "07926", "07961", "07962", "07963", "07970"], type: data.type }
  });

结果:

{"authenticity_token"=>"bMmx0pnJ6ePq6ogwSCR1JH55U7wtrMEOy6ME4rNRmCI=",
 "action"=>"create",
 "type"=>"undefined",
 "value"=>"07970",
 "controller"=>"admin/distributions",
 "email_id"=>"3"}

仍然只显示最后一个邮政编码。

或者我可以像这样简单地把它简化:

$.ajax({
    type: "POST",
    url: "/admin/emails/" + id + "/distributions",
    dataType: "script",
    data: { value: ['1', '2'] }
});

只有2 会返回。

我无法合理地理解这一点。还有其他人吗?

【问题讨论】:

  • 您是否使用过 Firebug 或 TamperData 来准确查看 HTTP POST 参数的样子?问题是必须重复“值”参数,每个邮政编码一次。 HTTP 允许这样做,但您的服务器端代码必须期待它并处理它。或者,jQuery 可能会将单个参数变成一堆参数,并修改名称,如“value[0]”、“value[1]”等。
  • 我正在使用 Rails 控制台查看 HTTP POST 参数。不太确定如何设置它以“预期”它,因为它只是在基本上没有 Rails 的情况下读取 HTTP POST,或者与服务器端代码有关的任何内容,并且现在正在显示 zip。如果它把它变成 value[0] 或 value[1],这些也会出现在我的参数中。我将发布我在上面查看的结果。
  • 好吧,我鼓励您在 浏览器 端使用一些东西来查看 HTTP 请求是如何开始的。从 Rails 方面来看,可能为时已晚。我个人喜欢 TamperData,但 Firebug 控制台也应该向您显示请求内容。
  • 是的,在 HTTP POST 中的 firebug 中,许多邮政编码值都被正确发送。
  • 我在我的 rails 应用程序上尝试了你的静态调用,我确实得到了所有的拉链。您使用的是哪个版本的 jQuery?

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

你可以试试这个

traditional: true

编辑:

我尝试了您的示例并使其正常工作。 这是脚本:

  $.ajax({
    type: "POST",
    url: "/home/test/" + 4,
    dataType: "script",
    traditional: true,
    data: { value: ['1', '2'] }
  });

这是方法

[HttpPost]
public ActionResult Test(string id, string[] value)
{
  return RedirectToAction("Index");
}

我在数组“value”中得到两个值

【讨论】:

  • 你用的是什么版本的jQuery?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2011-06-01
  • 2016-05-27
  • 1970-01-01
  • 2013-07-19
相关资源
最近更新 更多