我有一个后端可以理解 jQuery$.param
返回格式的查询字符串。例如,有一个像
{ search: "Miller", name: ["Felipe", "Fernanda"] }
将使用以下查询字符串请求 URL:
http://theurl/path?search=Miller&name%5B%5D=Felipe&name%5B%5D=Fernanda
基本上它使用name[]=Felipe&name[]=Fernada
,但 URL 编码。
同一个对象,当被 AngularJS 解析时以这种格式结束:
http://theurl/path?search=Miller&name=Felipe,Fernanda
我的后端不明白。
阅读this other question,我认为使用 transformRequest 会有所帮助,但事实并非如此。这是我的测试代码:
HTML
<div ng-controller="UserCtrl">
<pre>{{ data | json}}</pre>
</div>
JavaScript
var myApp = angular.module('myApp',['ngResource']);
var transformFn = function(data, headersGetter) {
console.debug('transformRequest', data);
if (!data) return;
console.debug('data in', data);
var dataOut = $.param(data);
console.debug('data out', dataOut);
return dataOut;
};
myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.transformRequest.push(transformFn);
}]);
myApp.factory('User', ['$resource', function($resource) {
return $resource('/echo/:type/', {type:'json'}, {
query: { method: 'GET' }
});
}]);
myApp.controller('UserCtrl', ['$scope', 'User', function($scope, User) {
User.query({ seach: 'Miller', name: ['Felipe', 'Fernanda']},
function(data) {
console.debug('data', data);
$scope.data = data;
});
}]);
但是,当您尝试运行此代码时,您会注意到 data 属性transformFn
始终未定义,并且查询字符串保持为 AngularJS 格式。
您也可以在 jsFiddle 中看到这一点:http: //jsfiddle.net/fcoury/QKmnX/
知道如何强制查询字符串使用 jQuery 的 $.param 格式吗?
编辑:我正在检查分支 v1.0.x 的 AngularJS 代码,但找不到任何更改查询字符串构造代码的方法,这发生在这里:
https://github.com/angular/angular.js/blob/v1.0.x/src/ngResource/resource.js#L299-L306
有没有人有任何聪明的方法来覆盖 ngResource 类的那一部分?