angularjs – 为什么资源查询转换中的数据变量未定义
我很有棱角……所以我确信我做错了.花了好几个小时试图寻找一个解决方案,但
angularjs文档旁边是无用的……几乎所有的例子都试图在全球范围内设置它.
我试图传递一个复杂的javascript对象作为查询参数.该对象有一个属性是一个数组,因此我需要展平(正确的术语??)这个对象,以便MVC绑定可以正确地实例化模型. 我试图传递的对象是沿袭的 newRequest = { SearchTerms: 'error',PageSize: 25,... Facets: [ { Field: 'createdBy',Value: 'Joe' },{ Field: 'createdBy',Value: 'Mary' } ] } 我宣布我的资源如下 (function () { "use strict"; angular .module('common.services') .factory('searchResource',['$resource','appSettings',searchResource]); function searchResource($resource,appSettings) { return $resource(appSettings.searchPath,null,{ query: { method: 'GET',transformRequest: function (data,headersGetter) { if (data === undefined) { // this is always true return data; } return $.param(data); } } }); } }()); 我正在使用它 vm.executeSearch = function () { searchResource.query( newRequest,function (data) { vm.response = data; vm.request = data.Request; } ); } 正在调用transformRequest函数…而headersGetter有一个值. 附加信息 正如所建议的那样,我改变了方向,而不是使用我通过工厂提供服务的资源.结果相同……数据参数未定义.这是新代码. (function () { "use strict"; angular .module('common.services') .factory('searchProvider',['$http',searchProvider]); function searchProvider($http,appSettings) { return { query: function (request,callback) { $http({ url: appSettings.searchPath,method: 'GET',params: request,headersGetter) { if (data == undefined) { return data; } return $.param(data); } }) .success(function (data) { callback(data); }); } } } }()); searchProvider.query( newRequest,function (data) { console.log(data); vm.response = data; vm.request = data.Request; } ); 但问题是数据未定义!我知道newRequest对象是有效的,因为调用已经结束.只是有一个格式不正确的网址.我哪里做错了? 解决方法
问题是它是一个GET请求,ngResource不接受GET请求中的数据:
见https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js#L526 var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); 它使用hasBody来确定是否设置数据参数. 所以在这一点上你最好的选择是转向使用$http,因为ngResource用于更多RESTful api或将你的API切换到POST而不是GET. 编辑 还有一件事:你不需要使用if(data === undefined) Javascript pututhiness:https://developer.mozilla.org/en-US/docs/Glossary/Truthy 回复其他信息 您仍然未对数据进行定义,因为您没有将数据设置为任何内容,而是设置了参数.但是一旦你在这里,你就不需要改变请求了. 你可以这样做 $http({ ... params: $.param(request),... }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |