我正在尝试使用
从Wattpad.com的API级别3 http://www.wattpad.com/api/v3/stories/获取服务
angular.module('myApp')
.service('WattpadService', function WattpadService($resource) {
var resource = $resource('http://www.wattpad.com/api/v3/stories', {}, {
query: {method:'GET',
params:{query:'margaretatwood'},
isArray:false
}
});
return {
loadStories: function() {
return resource.query();
}
};
});
控制器
angular.module('myApp')
.controller('MainCtrl', function ($scope, WattpadService, $resource) {
WattpadService.loadStories()
.$promise.then(
function(data) {
console.log("success");
console.log(data);
},
function(response) {
console.log(response);
}
);
});
我收到的数据来自console.log非常奇怪:
Resource
0: "a"
1: "r"
2: "r"
3: "a"
4: "y"
5: " "
6: "("
7: "↵"
(etc)
据我所知,我遇到了http://mariuszprzydatek.com/2013/12/13/tricky-behavior-of-angularjs-resource-service/所述的问题。使用transformResponse,如:
query: {method:'GET',
params:{query:'margaretatwood'},
isArray:false,
transformResponse: function(data, headers){
return JSON.parse(data);
}
}
给我
SyntaxError: Unexpected token a
at Object.parse (native)
有什么建议吗?
编辑 console.log数据在解析之前(使用只有1个故事的随机用户而不是Atwood,他们有很多。)
array (
'stories' =>
array (
0 =>
array (
'id' => '18265912',
'title' => 'A Little Something Different',
'length' => 9370,
'createDate' => '2014-06-23T21:48:55Z',
'modifyDate' => '2014-07-15T18:24:45Z',
'voteCount' => 20,
'readCount' => 153,
'commentCount' => 4,
'language' =>
array (
'id' => 1,
'name' => 'English',
),
'user' =>
array (
'name' => 'iamsandyhall',
'avatar' => 'http://a.wattpad.com/useravatar/iamsandyhall.128.340656.jpg',
),
'description' => 'Lea and Gabe are in the same creative writing class. They get the same pop culture references, order the same Chinese food, and hang out in the same places. Unfortunately, Lea is reserved, Gabe has issues, and despite their initial mutual crush, it looks like they are never going to work things out.
But somehow even when nothing is going on, something is happening between them, and everyone can see it. Their creative writing teacher pushes them together. The baristas at the local Starbucks watch their relationship like a TV show. Their bus driver tells his wife about them. The waitress at the diner automatically seats them together. Even the squirrel who lives on the college green believes in their relationship.',
'cover' => 'http://a.wattpad.com/cover/18265912-256-k534988.jpg',
'completed' => false,
'categories' =>
array (
0 => 1,
1 => 4,
),
'tags' =>
array (
0 => 'adult',
1 => 'contemporary',
2 => 'reads',
3 => 'swoon',
4 => 'swoonworthy',
5 => 'young',
),
'rating' => 3,
'copyright' => 1,
'url' => 'http://www.wattpad.com/story/18265912-a-little-something-different',
'firstPartId' => 56140494,
'numParts' => 3,
'parts' =>
array (
0 =>
array (
'id' => 56140494,
'title' => 'A Little Something Different (September and October)',
'draft' => false,
'modifyDate' => '2014-07-14T19:45:12Z',
'length' => 723,
'videoId' => '',
'photoUrl' => '',
'commentCount' => 1,
'voteCount' => 6,
'readCount' => '91',
),
1 =>
array (
'id' => 56140699,
'title' => 'September (Maribel - Lea\'s roommate)',
'draft' => false,
'modifyDate' => '2014-07-14T19:48:02Z',
'length' => 2611,
'videoId' => '',
'photoUrl' => '',
'commentCount' => 0,
'voteCount' => 6,
'readCount' => '37',
),
2 =>
array (
'id' => 56140763,
'title' => 'September (Inga - creative writing professor)',
'draft' => false,
'modifyDate' => '2014-07-15T18:21:20Z',
'length' => 6036,
'videoId' => '',
'photoUrl' => '',
'commentCount' => 3,
'voteCount' => 8,
'readCount' => '27',
),
),
'deleted' => false,
),
),
'total' => 1,
'categories' =>
array (
0 =>
array (
'id' => 4,
'name' => 'Romance',
'count' => 1,
),
1 =>
array (
'id' => 1,
'name' => 'Teen Fiction',
'count' => 1,
),
),
'tags' =>
array (
),
)
typeof(data)返回string
哦 - 似乎是一个php数组
答案 0 :(得分:1)
在解析数据之前,你能显示数据的console.log吗?
Angular的JSON格式有时与原生javascript的json格式不同,您可能希望尝试使用angular.fromJson而不是JSON.parse。
答案 1 :(得分:0)
response already parsed so you no need to parse again. try to return data instead parsing ,
query: {method:'GET',
params:{query:'margaretatwood'},
isArray:false,
transformResponse: function(data, headers){
return data;
}
}
如果你想解析,仍然使用角度json转换方法
angular.toJson() angular.fromJson()
答案 2 :(得分:0)
原来我从响应中得到了一个php数组。通过设置
修复headers: {
'Accept': 'application/json'
}
感谢DavidLin帮助我解决这个问题!
答案 3 :(得分:0)
资源 0:" f" 1:" a" 2:" l" 3:" s" 4:" e"
This finally worked for me:
transformResponse: function (data, headersGetter) {
return { isCorrect: angular.fromJson(data) }
}