【发布时间】:2016-11-30 09:41:43
【问题描述】:
我在 YouTube 上浏览了一组 Angular 视频,发现 .success 已被弃用,并改用 .then。使用 .json 文件和 .txt 文件时出现 404 错误。我尝试使用 .txt,因为人们提到浏览器不允许本地文件访问其他本地文件。
这是我目前的 $http 请求
$http.get('data/ninjas.txt').then(function(response) {
// Success!!!
$scope.ninjas = response.data;
});
这是我的 .json 文件,通过 JSONLint 有效
[{
"name": "Yoshi",
"belt": "green",
"rate": 50,
"available": true,
"thumb": "content/img/yoshi.png"
}, {
"name": "Crystal",
"belt": "yellow",
"rate": 30,
"available": true,
"thumb": "content/img/crystal.png"
}, {
"name": "Ryu",
"belt": "orange",
"rate": 10,
"available": true,
"thumb": "content/img/ryu.png"
}, {
"name": "Shaun",
"belt": "black",
"rate": 1000,
"available": true,
"thumb": "content/img/shaun.png"
}]
我尝试使用 httpster 和实时预览中内置的括号进行测试。我收到 404 错误,但该文件确实存在,如您在图片中看到的那样
如果有帮助,这是我的整个 app.js 文件
var myNinjaApp = angular.module('myNinjaApp', ['ngRoute']);
myNinjaApp.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/home', {
templateUrl: 'views/home.html'
})
.when('/directory', {
templateUrl: 'views/directory.html',
controller: 'NinjaController'
})
.otherwise({
redirectTo: '/home'
});
}]);
myNinjaApp.controller('NinjaController', ['$scope', '$http', function($scope, $http){
$scope.removeNinja = function(ninja){
var removedNinja = $scope.ninjas.indexOf(ninja);
$scope.ninjas.splice(removedNinja, 1)
};
$scope.addNinja = function(){
$scope.ninjas.push({
name: $scope.newninja.name,
belt: $scope.newninja.belt,
rate: parseInt($scope.newninja.rate),
available: true
});
$scope.newninja.name = "";
$scope.newninja.belt = "";
$scope.newninja.rate = "";
};
$http.get('data/ninjas.txt').then(function(response) {
// Success!!!
$scope.ninjas = response.data;
});
}]);
【问题讨论】:
-
为什么ninjas.txt文件不是ninjas.json文件?
-
@JoeriShoeby 我已经尝试过 404 和 404。我在另一个问题上读到,当运行本地浏览器/本地主机时,解释 JSON 时会出现问题,但由于某种原因使文件成为 .txt 或 .html 文件有效.我有一个 .json 文件并且也尝试过。都是 404。
-
你的路径是相对于 index.html 还是 app.js 文件?尝试使用'app/data/ninjas.json'
-
@JoeriShoeby 将路径更改为您建议的工作!这条路行得通有什么原因吗?我使用 .json 和 .txt 文件进行了尝试,并且都有效。谢谢!只是好奇为什么它必须是相对于 index.html 而不是相对于 app.js 的路径
-
因为浏览器是根据当前页面的url而不是脚本源发出相对请求