AngularJS使用Array参数调用ajax调用

时间:2015-11-22 06:10:13

标签: angularjs ajax

我已经看到以下SO问题Send array via GET request with AngularJS' $http servicePass array of data from Angular $http POST。但那里建议的解决方案似乎对我不起作用。我特别关注数组对象

我有以下带数组参数的AngularJS ajax调用

return $http({
    method: 'GET',
    url: '/api/PatientCategoryApi/PatCat',
    params: { "numbers[]": [{ First: 999, Second: 888 }]},
    headers: { 'Content-Type': 'application/Json' }
})

该通话产生的网址似乎对我不起作用。我尝试了各种params的头像,生成的url(通过使用fiddler得到它们)如下。

params: { numbers: JSON.stringify([{ First: 999, Second: 888 }]) },
http://localhost:50849/api/PatientCategoryApi/PatCat?numbers=%5B%7B%22First%22:999,%22Second%22:888%7D%5D 

params: { "numbers[]": JSON.stringify([{ First: 999, Second: 888 }]) },
http://localhost:50849/api/PatientCategoryApi/PatCat?numbers%5B%5D=%5B%7B%22First%22:999,%22Second%22:888%7D%5D 

params: { "numbers[]": [{ First: 999, Second: 888 }]},
http://localhost:50849/api/PatientCategoryApi/PatCat?numbers%5B%5D=%7B%22First%22:999,%22Second%22:888%7D 

params: { numbers: [{ First: 999, Second: 888 }]},
http://localhost:50849/api/PatientCategoryApi/PatCat?numbers%5B%5D=%7B%22First%22:999,%22Second%22:888%7D 

我希望网址为http://localhost:50849/api/PatientCategoryApi/PatCat?numbers[0][first]=999&numbers[0][second]=888。因为这是我的Asp.net MVC服务器端代码能够理解和解密数组的唯一方法。

一种方法是设置url本身以完全保持params,如下所示。以下是有效的。这是我的最后一个选择。

return $http({
    method: 'GET',
    url: '/api/PatientCategoryApi/PatCat?numbers[0][first]=999&numbers[0][second]=888&numbers[1][first]=9999&numbers[1][second]=8888',
    //params: {...}, remove this completely
    headers: { 'Content-Type': 'application/Json' }
})

但是我想明白,如何使用params这样做,所以AngularJS会为我做这件事。

1 个答案:

答案 0 :(得分:5)

你想要httpParamSerializerJQLike!像这样使用它:

$http({
  ...
  params: { "numbers": [{ First: 999, Second: 888 }]},
  paramSerializer: '$httpParamSerializerJQLike',
  ...
});

或者您可以将其设置为配置块中所有$http个调用的默认值,如下所示:

angular.module('yourModuleName').config(function($httpProvider) {
  $httpProvider.defaults.paramSerializer = '$httpParamSerializerJQLike';
});