【问题标题】:server sends raw json and can't be processed by angular服务器发送原始 json 并且不能被 angular 处理
【发布时间】:2016-04-07 14:19:34
【问题描述】:

我正在尝试从服务器访问数据到$scope.resp,但页面上只显示原始 json。

这里是路由/addr.js

router.get('/', function(req, res) {
    var pers = [{add: "abc"},{add: "pqr"}]
        res.json(pers)
   });
  })

aj.js:

 var app = angular.module('addbook', [])
 app.controller('listcontroller', function($scope, $http){
  $http.get('/list').then(function(response) {
    $scope.resp = response
  })
 })

chrome 控制台上没有错误。我注意到当 $http.get 请求被注释掉时,它仍然显示原始 json。我看到了一个类似的问题,他们要求做 stringify 但它不起作用。

【问题讨论】:

  • 试试$scope.resp = response.data.then返回的promise对象还有其他响应信息,比如response.status。较旧的、已弃用的 .success 回调不包含此信息。如果这没有帮助,您应该考虑使用用于呈现 resp 的 HTML 更新您的问题。
  • 谢谢。我仍然只得到原始 json。我注意到即使console.log 也不适用于aj.js 文件。请求到达服务器并呈现 json 和 aj.js 文件没有被读取。
  • $http.get('/list').then(function(response) { console.log(response) })
  • 如果您注释掉将检索数据的$http.get,您的视图怎么会呈现数据?这里仍然缺少一些东西。您确定您处于角度视图中吗?您尝试浏览的 URL 是什么,以及该 URL 的 HTML 模板是什么样的?
  • 您的路由器正在为/ 提供服务也没有任何意义,但您的$http.get 似乎在请求/list。这是另一个标志,表明您并没有真正查看有角度的页面,尤其是在您有数据的情况下。

标签: angularjs json express


【解决方案1】:

在聊天讨论后,我们发现问题出在您的 Express 路线上。

Angular 是一个客户端框架,它不执行整个页面的重新加载。用户不直接导航到提供数据的服务器上的 URL,他们导航到服务器上不存在的 URL,该 URL 被定向到 index.html 文件,Angular 能够在其中执行 AJAX请求从服务器 URL 检索数据并动态重绘页面。

如果您的用户导航到提供 RAW JSON 的服务器路由,浏览器将接收 JSON 并在没有任何模板、样式或其他页面元素的情况下显示它。因此,您的服务器 URL 和您的客户端 URL 需要不同,并且您的服务器应该使用专门标识为 API url 的 URL。许多人在这些 URL 前加上 /api/ 以避免混淆,或者保护它们以使客户无法直接请求它们。

【讨论】:

    【解决方案2】:

    如果你得到一个纯 Json 尝试像这样转换

    $scope.resp = JSON.parse(response.data); 
    

    【讨论】:

    • 谢谢。我也试过你的方法。它通过解析在控制台上引发错误。正确的答案是我的路线错了。现在它正在工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多