AngularJS中$http.then()后追加数据失败问题咨询
嘿,我帮你梳理下这个问题,看起来有几处关键细节没处理好,咱们一步步来解决:
1. 先修正JSON格式错误
你提供的JSON存在语法问题:数组[]内部不能直接使用key: value的结构,应该把index作为键放在对象中。正确的JSON结构应该是:
{"Data": [{"index": [{"Name":"append_here_1"},{"Name":"append_here_2"}]}]}
2. 修复服务中的依赖注入问题
你的Request_service里用到了$http但没有注入它,这会导致$http未定义,服务根本无法正常发起请求。修改后的Request.js应该是这样:
app.service('Request_service', function($http) { // 这里必须注入$http this.get_json = function(){ return $http.post('http://...', { params_1: "123", params_2: "abc" }) .then(function success(e) { return e.data; }, function fail(e){ console.error('请求失败详情:', e); // 建议打印错误信息,方便排查问题 return false; }); } });
小提示:依赖注入是AngularJS的核心机制,任何用到的服务都必须显式注入哦
3. 修正控制器的依赖与异步逻辑
控制器里有两个明显问题:一是依赖名称写错了(Request_servi...应该是Request_service);二是get_json返回的是Promise对象,你必须在Promise的then方法里处理异步返回的数据,而不是直接赋值。修改后的Controller.js:
app.controller('myCtrl', function($scope, Request_service) { $scope.index_data = []; // 调用服务获取数据,处理异步结果 Request_service.get_json() .then(function(responseData) { if (responseData) { // 根据修正后的JSON结构,取出需要的index列表 var newItems = responseData.Data[0].index; // 追加数据到index_data数组 $scope.index_data = $scope.index_data.concat(newItems); // 或者用push.apply批量添加:$scope.index_data.push.apply($scope.index_data, newItems); console.log('数据追加成功:', $scope.index_data); } else { console.log('请求返回失败,请检查接口或错误日志'); } }); });
4. 额外排查建议
- 打开浏览器开发者工具的Network标签,查看请求的响应内容,确认接口确实返回了格式正确的JSON。
- 如果是跨域请求,需要确保后端配置了CORS(跨域资源共享),否则浏览器会拦截
$http请求。
内容的提问来源于stack exchange,提问作者aasqw asdqwd
相关产品推荐
相关产品推荐

