如何将http.get(// json from server)中的JSON数据分配给Javascript变量?

时间:2016-03-17 10:49:07

标签: javascript arrays angularjs json

我已尝试将所有内容分配给我的JSON数据(JSON对象?)和$ http.get(" https://server url到我的json数据")。success(function(response){} 到javascript中的局部变量,但它不起作用。我真的很困惑所有这些json字符串和对象。这是我的代码。

我从服务器获取的json数据的格式

mutate

所以,我的问题是如何将这些数据存储在js数组中。我需要它为我的javascript高图控制器。我试过了..

controller.js

{
   "status":"success",
   "data":{
      "user":{
         "username":"user1",
         "fullName":"name "       
      },
      "vehicles":[ ],
      "chargeBoxes":
      [
         {
            "id":1,            
            "name":"Station 1",
            "availability":"offline", 
         },
         {
            "id":2,            
            "name":"Station 2",
            "availability":"online", 
         },
         {
            "id":3,            
            "name":"Station 3",
            "availability":"online", 
         }
     ]
}

//当我这样做时(测试用例)(json变量只有一行并且''

myApp = angular.module('ServiceDashboard');
myApp.controller('DataController' function($scope, $http, $interval) {
   $http.get("https://server-url.com/../login?username=..&password=..").success(function(response) {
        $scope.jsonData = response.data;
   });


var categorieData = [];

var json = JSON.parse(jsonData); 

for (var i = 0; i <= jsonData.chargeBoxes.length - 1; i++)
{
    categorieData[i] = jsonData.chargeBoxes[i].name;
}

但是当我尝试使用我的json数据的真实形式(带有{}的多行)时,它就无法工作。

// Here I have a json string (one line with ' ')
var jsonData= '{"status": "success", "data": {"chargeboxes":[{..},{..},{..}]}';
// and then I parse this json string to an json object and iterate over it and store the chargeBoxes.name values into the categorieDate array.

我真的不知道该怎么做了。首先,我想尝试使用上面的局部变量(var jsonData = {..};因为使用oneline字符串&#39;&#39;它工作),然后我想使用这个json直接来自服务器的数据($ scope.jsondata ...)。

谢谢!

4 个答案:

答案 0 :(得分:0)

$ http.get被称为async。

myApp = angular.module('ServiceDashboard');
myApp.controller('DataController' function($scope, $http, $interval) {
    $http.get("https://server-url.com/../login?username=..&password=..").success(function(response) {
        $scope.jsonData = response.data;
        // >> Put your parse code here
        var categorieData = [];
        var json = JSON.parse(jsonData); 
        for (var i = 0; i <= jsonData.chargeBoxes.length - 1; i++)
        {
            categorieData[i] = jsonData.chargeBoxes[i].name;
        }
    });

答案 1 :(得分:0)

您的代码中存在多个问题。首先,服务器响应数据不在

$scope.jsonData = response.data;

但你会在

中找到它
$scope.jsonData = response.data.data;

$ http.get返回从服务器发送的响应的json对象。但是响应主体位于要返回的响应对象的data属性中。由于服务器的响应也具有数据属性,因此您需要更深层次。

其次var json = JSON.parse(jsonData);不起作用。在执行此代码行时,数据不可用。把它放在你$http.get()方法的成功回调中,你会没事的。

看起来应该是这样的:

myApp = angular.module('ServiceDashboard');
myApp.controller('DataController' function($scope, $http, $interval) {
$http.get("https://server-url.com/../login?username=..&password=..").success(function(response) {
    $scope.jsonData = response.data.data;
    for (var i in $scope.jsonData.chargeBoxes)
        categorieData.push(jsonData.chargeBoxes[i].name);
});

答案 2 :(得分:0)

您需要在$http.get()调用的成功方法中处理您的jsonData,因为它是异步的。

<强> controller.js

var myApp = angular.module('ServiceDashboard');
myApp.controller('DataController' function($scope, $http, $interval) {

$scope.barChartConfig = { categories: [] };
$http.get("https://server-url.com/../login?username=..&password=..").success(function(response) {
    $scope.jsonData = response.data.data;

    var json = JSON.parse($scope.jsonData); 
    var categorieData = [];
    for (var i = 0; i <= json.chargeBoxes.length - 1; i++)
    {
        categorieData.push($scope.jsonData.chargeBoxes[i].name);
    }
    $scope.barChartConfig.categories = categorieData;
   });

答案 3 :(得分:-2)

var url = "http://<domainname>/<url>"

var jsonData = $.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

检查jsonData变量中的json响应。