javascript - 从 AngularJS 通过 POST 发送 "associative array"

标签 javascript ajax angularjs

我有一个像这样的“过滤器”对象

{
  name: 'text',
  value: 'xxx',
  field: 'firstname'
}

表示字段的过滤器,并在我更改输入字段的值时更新。 我尝试通过以下方式将其存储在数组中:

$scope.active_filters[filter.field] = filter;

这样我就知道我在哪个字段上得到了哪个过滤器。 过滤应该发生在服务器端,所以我试图将这个数组发送到我的 API。

$http.post(url, $scope.active_filters)

正如我在 Chrome 中看到的那样,我有一个包含所需元素但长度为 0 的数组

[status: Object]
length: 0
  status: Object
    field: "status"
    name: "text"
    value: "x"
    __proto__: Object
__proto__: Array[0]

但是我的请求中没有发送对象。如果我通过 $scope.active_filters.push(filter) 添加对象,它会发送到服务器,但它的索引为 0 而不是我想要的值。

我怎样才能实现这两个目标?我的数组中的命名索引并将数据发送到 api。

最佳答案

我在这里猜测,但您的代码是这样的:

var assoc_array = [];
assoc_array["foo"] = "bar";
assoc_array["ipsum"] = "lorem";

JavaScript 不像 PHP 那样了解关联数组。 JavaScript 有对象,因为一切都是对象(甚至数组),所以您可以遇到这种情况。

您不是在数组中设置元素,而是为对象分配属性。这意味着 神奇的 .length 属性没有得到更新,因为数组仍然是空的。

如果您将代码更改为:

var assoc_array = {}; // <-- {} instead of []     
assoc_array["foo"] = "bar";
assoc_array["ipsum"] = "lorem";

您将得到一个对象(而不是数组),并且您不会有 .length 属性。

这是你将如何使用数组

var indexed_array = [];
indexed_array[0] = "bar";
indexed_array[1] = "lorem";
indexed_array.length; // 2
indexed_array[100] = "foo";
indexed_array.length; // 101 - arrays are never sparse in JS, PHP will give 3
indexed_array[2]; // undefined

关于javascript - 从 AngularJS 通过 POST 发送 "associative array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19834095/

相关文章:

javascript - Arduino yun vs tessel vs espruino

javascript - 在客户端使用 Mailgun RestFUL

javascript - PhoneGap 在 HTML 中加载本地页面

javascript - 在 webpack 中传递环境相关变量

javascript - 在 angularJS 中如何处理 $http.post 的异步返回?

jquery - Rails 3.0 form_tag w/remote 不正确接受 : header

javascript - ajax 的多个循环不起作用

javascript - 如何阻止 IE 缓存我的 XHR

javascript - 变量访问的 Angular 和 javascript 范围

angularjs - 如何在同一 angularjs 页面的 ng-template 脚本标记中使用输入文本框值