Javascript 在AngularJS中解析JSONP文件
我不熟悉Angular,也不太熟悉JSONP格式。在我的代码中,我设置了一个工厂来读取JSONP文件,并正确地将数据变量作为JSONP数据返回Javascript 在AngularJS中解析JSONP文件,javascript,json,angularjs,jsonp,Javascript,Json,Angularjs,Jsonp,我不熟悉Angular,也不太熟悉JSONP格式。在我的代码中,我设置了一个工厂来读取JSONP文件,并正确地将数据变量作为JSONP数据返回 $http.get('someJSONFile').success(function(data){ console.log(data); }); 控制台日志返回以下信息: states([{"code":"AL","name":"Alabama"},{"code":"AK","name":"Alaska"},{"code":"AZ","nam
$http.get('someJSONFile').success(function(data){
console.log(data);
});
控制台日志返回以下信息:
states([{"code":"AL","name":"Alabama"},{"code":"AK","name":"Alaska"},{"code":"AZ","name":"Arizona"},{"code":"AR","name":"Arkansas"},{"code":"CA","name":"California"},{"code":"CO","name":"Colorado"},{"code":"CT","name":"Connecticut"},{"code":"DE","name":"Delaware"}])
所以-我被困在现在该做什么。我有一个包含函数的数据对象。我需要从这个函数中解析出JSON,但不确定如何做
我在其他地方读到过,我需要在控制器或工厂的某个地方声明一个名为
function states(results)
{
// what is in results should be the JSON data I crave
}
但即使我这样做了,我也不认为它会执行——因此我不确定在那一点上我应该做些什么来将JSON数据导入到我可以使用的对象中
我试图解析的完整文件是
感谢您的帮助 Angular
$http
服务提供了一种使用JSONP端点的方法。在您的情况下,这应该有效:
$http.jsonp('someJSONFile').then(function(data) {
console.log(data)
});
在幕后,Angular将创建一个全局可访问的函数,该函数将接收数据、解析并进一步传递,因此您无需担心自己创建函数。看起来您尝试的是标准JSON而不是JSONP,JSONP将需要回调,并且仅当从其他域获取数据时才需要,ie API服务 此外,您提供的控制台日志输出不是有效的JSON
//init app
var app = angular.module('MyApp',[]);
//setup a factory for the data handling
app.factory("Data",function($http){
return {
getData:function(type){
return $http.get(type).
then(function(result) {
return result.data;
});
}
}
});
//in a controller 'call' the factory for the data
app.controller('main', function main($scope, Data) {
//other stuff
Data.getData('someJSONFile').then(function (data) {
$scope.jsonData = JSON.parse(data);
});
//other stuff
});
所以我的错误是愚蠢的。JSON文件给了我一个必须定义的自定义回调的名称。一旦我这么做了,一切都很顺利。这是密码
angular.module('locationApp')
.controller('MainCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.states = [];
$scope.cities = [];
// Function for the States callback on the JSON files provided
window.states = function (data)
{
$scope.states = data;
};
// Get the State JSON file.
$http.jsonp('http://locationinc-mapping-demo.herokuapp.com/states.json');
}]) // end of MainCtrl
是的,我想你可以调用
try{eval(data)}catch(e){}
,然后在你的states
函数中,插入console.log(results)
看看会发生什么。好的,现在我得到一个错误,它的状态没有定义是你自己的服务吗?它不是真正的JSONP,您不应该硬编码状态
函数作为响应。取而代之的是,你应该从客户端获取回调的GET参数,并用它包装JSON数据。不,不是我的服务,这就是问题所在。有没有一种方法可以说你想要使用不同的函数?这个服务是可配置的吗?我检查它不理解GET参数回调
,可能是不同的?否则,您将必须创建全局函数状态。好的,这使我看到一个部分,其中请求的资源上不存在“访问控制允许原始”标题,错误。我可以通过使用一个Chrome插件来解决这个问题,该插件允许我覆盖跨源错误。但是现在当我解析文件时,我得到了一个SyntaxError:当它试图解析状态时,意外的令牌s错误。我试图解析的文件取决于您可能不需要解析的数据格式,即如果不是字符串,那么更改行$scope.jsonData=JSON.parse(data);到$scope.jsonData=数据;