如何在函数内部使用$ http.get()的url值?

时间:2016-08-17 11:07:42

标签: javascript angularjs

您好我使用AngularJS解析了三种不同的Web服务:这是我的代码:

app.factory('myapp', ['$http', function($http) {        
function getLists() {
var tab = ['url1', 'url2', 'url3'];
var list = [];
for(i = 0; i < tab.length; i++) {
    $http.get(tab[i]) 
    .then(function(res) {
        res.data.error='';
        list.push(res.data);
    }).catch(function (res) {
res.data.error='file not found';
});
}
return list;
}

return {
getLists: getLists
};
]);

在html页面中,我必须显示在Json文件中找到的数据 <tr ng-repeat="d in list" ng-show="d.error == ''"> <td>{{d.nm}}</td> <td>{{d.cty}}</td>
<td>{{d.hse}}</td> <td>{{d.yrs}}</td> </tr> <tr ng-repeat="d in list"ng-show="d.error != ''"> <td>File not found</td></tr>

因此,如果找不到URL或出现错误,我应该显示一条错误的行。 我现在想要的是tp指定未找到的Url。例如,如果找不到url1,我想要添加一条消息url1 +&#34;找不到&#34; 我试着在我的工厂里这样做

res.data.error= tab[i]+' file not found';

并在我的HTML中:

<tr ng-repeat="d in list"ng-show="d.error != ''">
  <td>{{d.error}}</td></tr>

但没有出现,当我使用警报调试时

alert(tab[i]+' file not found');

我找不到未定义的文件&#39;。 有办法解决我的问题吗?

1 个答案:

答案 0 :(得分:1)

使用响应对象,res.config.url包含被击中的网址。 但是,由于网址不存在,.catch block将被执行,而不是.then block

$http.get(tab[i]) 
.catch(function(res) {
   res.data = { error : res.config.url +' file not found' };
})

另外,你必须让调用代码异步使用它,现在你试图以同步的方式访问它,这将永远不会工作......