我已经看到以下SO问题Send array via GET request with AngularJS' $http service和Pass 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会为我做这件事。
答案 0 :(得分:5)
你想要httpParamSerializerJQLike!像这样使用它:
$http({
...
params: { "numbers": [{ First: 999, Second: 888 }]},
paramSerializer: '$httpParamSerializerJQLike',
...
});
或者您可以将其设置为配置块中所有$http
个调用的默认值,如下所示:
angular.module('yourModuleName').config(function($httpProvider) {
$httpProvider.defaults.paramSerializer = '$httpParamSerializerJQLike';
});