2015-04-02 22 views
2

我是Angular的新手,也是JSONP格式的新手。在我的代碼,我設立了工廠,在JSONP文件閱讀 - 我找回數據變量作爲JSONP數據正確解析AngularJS中的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數據導入我可以使用的對象。

我試圖解析完整的文件是http://massachusettswebdesigns.com/states.json

任何幫助表示讚賞!

+0

是的,我想你可以叫'{嘗試的eval(數據)}趕上(E){}',然後在你的'states'功能,扔在'的console.log(結果)看看會發生什麼。 – 2015-04-02 20:03:29

回答

1

角度$http服務提供了一個method消耗JSONP端點。你的情況,這應該工作:

$http.jsonp('someJSONFile').then(function(data) { 
    console.log(data) 
}); 

幕後,角將創建接收數據,解析並進一步傳遞一個全局可訪問的功能,所以你不必擔心自己創造的功能。

+0

好吧,現在我收到一個錯誤,說明沒有定義 – Waterskier19 2015-04-03 00:35:37

+0

這裏是我需要解析的文件 - http://massachusettswebdesigns.com/states.json – Waterskier19 2015-04-03 00:50:35

+0

它是你自己的服務嗎?這不是真的JSONP,你不應該硬編碼'狀態'函數作爲迴應。相反,你應該採取任何來自客戶端的回調GET參數,並用它包裝JSON數據。 – dfsq 2015-04-03 06:02:41

0

什麼樣子你所要做的是標準的JSON不是JSONP,JSONP需要一個回調,如果從不同的域獲取數據時,才需要,即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 
}); 
+0

好吧,這讓我得到了一個部分,我得到了一個沒有'訪問控制允許來源'標題出現在請求的資源,錯誤。 我可以通過使用Chrome的插件來解決這個問題,該插件允許我覆蓋交叉原點錯誤。 但現在當我解析文件時,我得到一個SyntaxError:意外的令牌的錯誤,當它試圖解析的狀態。 我想解析的文件是http://massachusettswebdesigns.com/states.json – Waterskier19 2015-04-03 00:45:32

+0

根據數據格式,你可能不需要解析它,也就是說如果不是字符串,所以改變行$ scope.jsonData = JSON.parse(數據);到$ scope.jsonData = data; – 2015-04-03 15:09:06

0

所以我的錯誤是一個愚蠢的。 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