Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中解析JSONP文件_Javascript_Json_Angularjs_Jsonp - Fatal编程技术网

Javascript 在AngularJS中解析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

我不熟悉Angular,也不太熟悉JSONP格式。在我的代码中,我设置了一个工厂来读取JSONP文件,并正确地将数据变量作为JSONP数据返回

$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=数据;