【问题标题】:Using ajax json response in an angular scope variable在角度范围变量中使用 ajax json 响应
【发布时间】:2016-11-20 20:56:10
【问题描述】:

好的,我正在连接到一个新的桌面 API 以获取哪些票是开放的。现在我想使用 angular.js 在我自己的网络应用程序中动态显示它。目前我收到了来自 freshdesk API 的 json 响应,但我无法将其存储到变量中然后解析到我的角度控制器 $scope.tickets 变量中。

我该怎么做,有没有更好的方法?我对 Angular 和 jQuery 还很陌生,所以我愿意接受任何关于如何做到这一点的建议。

这是我的代码:

var jsonData;
function getData() {

$.support.cors = true;
var settings = {
"async" : true,
"crossDomain" : true,
"url" : "https://helpdesk.example.com/helpdesk/tickets.json",
"type" : "GET",
"headers" : { "authorization": basicAuth, "Content-Type" : "application/json"}
}

$.ajax(settings).done(function (response) {
    //alert(response);
    console.log(response);
    jsonData = response;
});
}

我试过 jsonData = JSON.parse(response);但这不起作用,它是一个有效的 json 响应。

我的角度控制器:

app.controller('Ctrl', function ($scope, $http) {
     $scope.tickets = jsonData;
});

【问题讨论】:

  • 你不需要解析json

标签: jquery angularjs json ajax api


【解决方案1】:

您不必解析 json 响应。例如,如果您的响应如下所示。

[
{"ticket_id":1,"desc":"some desc"},
{"ticket_id":2,"desc":"some issues"}
] 

那么就可以直接作为

var tickets= response.data;
console.log(tickets[0].desc);

您可以直接设置范围变量 $scope.tickets。此外,您应该使用 Angular 的 http 服务来进行 http 调用而不是 ajax。

【讨论】:

  • 是的,我改用了 angular http 调用,现在工作正常。现在我唯一的问题是有些人在我们的票务系统上登录,用谷歌登录,我如何在我的代码中从 API 端授权他们。我通常只做一个基本的身份验证功能,但这对任何使用谷歌登录的人都不起作用。
  • 在登录为cookie或localstorage后存储一个token,然后在每次api调用时发送,你可以编写拦截器来添加授权头
  • 对不起,我还在学习很多东西,我该怎么做?如何让用户登录 google 并收到使用freshdesk API 的令牌,而不是将其存储到cookie 中以便稍后在调用其他请求时使用?
  • 从谷歌重定向后,您必须创建一个身份验证令牌,可用于对freshdesk api进行http调用
【解决方案2】:
app.controller('Ctrl', function ($scope, $http) {
    $scope.tickets = [];
    var _data = angular.fromJson(response.data);
         $scope.tickets = _data;
});

试试这个,我认为这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多