我正在尝试在AngularJS中获取rest api的JSON输出。以下是我面临的问题:
我的休息api看起来像:http://myserver.com:8888/dosomething/me@mydomain.com/arg2
。
示例代码/文档非常有用。
答案 0 :(得分:5)
我在这个问题上遇到了很多困难,所以希望这将有助于未来的某些人:)
JSONP期望一个函数回调,一个常见的错误是调用返回JSON的URL,并且你得到一个 Uncaught SyntaxError:Unexpected token:错误。相反,JSONP应该返回这样的东西(不要挂在示例中的函数名称上):
angular.callbacks._0({"id":4,"name":"Joe"})
documentation告诉您在URL上传递JSON_CALLBACK是有原因的。这将被回调函数名称替换以处理返回。每个JSONP请求都分配了一个回调函数,因此如果您执行多个请求,可以使用angular.callbacks._1,angular.callbacks._2等处理它们。
考虑到这一点,您的请求应该是这样的:
var url = 'http://myserver.com:8888/dosomething/me@mydomain.com/arg2';
$http.jsonp(url + '?callback=JSON_CALLBACK')
.then(function (response) {
$scope.mydata = response.data;
...
然后AngularJS将实际请求(替换JSON_CALLBACK):
http://myserver.com:8888/dosomething/me@mydomain.com/arg2?callback=angular.callbacks._0
有些框架支持JSONP,但如果你的api没有自动执行,你可以从查询字符串中获取回调名称来封装json。 示例在Node.js中:
var request = require('request');
var express = require('express');
var app = express();
app.get('/', function(req, res){
// do something to get the json
var json = '{"id":4,"name":"Joe"}';
res.writeHead(200, {"Content-Type": "application/javascript"});
res.write(req.query.callback + '(' + json + ')');
res.end();
});
app.listen(8888);
答案 1 :(得分:2)
我在这里遇到的主要问题与CORS有关。我通过在Chrome中禁用网络安全性获得了$ http来从服务器检索JSON数据 - 在启动Chrome时使用--disable-web-security
标记。
答案 2 :(得分:0)
关于8888端口,看看是否有效:
$scope.url = 'http://myserver.com:port/dosomething/:email/:arg2';
$scope.data = $resource($scope.url, {port:":8888", email:'me@mydomain.com',
arg2: '...', other defaults here}, …)
答案 3 :(得分:-1)
尝试逃避':' var url =' http://myserver.com \:8888 / dodthing / me@mydomain / arg2&#39 ;; 我很确定我在其他地方读到了这个