如何从flickr API获取正确的JSON对象
我使用flickr照片搜索方法来检索公共照片。 当我用jquery运行它时,它工作正常,我得到正确forms的json对象。
{ "photos": { "photo": [ { ......... } ] }, "stat": "ok" }
但是当我将它与AngularJs一起使用时,我得到了带有前缀jsonFlickrApi的相同对象
jsonFlickrApi({ "photos": { "photo": [ { ...... } ] }, "stat": "ok" })
我在AngularJs中使用的是:
myApp.service('dataService', function($http) { delete $http.defaults.headers.common['X-Requested-With']; this.flickrPhotoSearch = function() { return $http({ method: 'GET', url: 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=3f807259749363aaa29c2fa93945&tags=india&format=json&callback=?', dataType: 'json' }); } });
请告诉我如何将第二个JSON转换为第一个JSON。 我可以在$http
调用中做什么或者必须改变JSON对象。
url有问题。 这个url对我有用。
https://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=3f807259749363aaa29c712fa93945&user_id=61495424@N00&format=json&nojsoncallback=?
你必须在url中添加nojsoncallback = 1,就像这样
https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&api_key=XXX&format=json&nojsoncallback=1
并在响应时删除jsonFlickrApi函数。
您正在获得JSONP
响应(请注意P),它基本上是一个函数调用,其参数是您期望的响应。
轻松解决方案:使用参数response
创建一个名为jsonFlickrApi
的函数,您可以在那里进行交付。
此时,我不确定您是否可以在服务中定义您的function,但尝试一下。 如果没有,您可以在外面定义它。
或者,尝试使用$ http.get函数。 您是否在jQuery原始代码中指定了客户端接受的返回值?
编辑
尝试使用$ http或$ http.get设置请求的数据类型,而不要忘记在settings对象中指定data属性。
$http({ url: 'http://localhost:8080/example/teste', dataType: 'json', method: 'POST', data: '', headers: { "Content-Type": "application/json" } }).success(function(response){ $scope.response = response; }).error(function(error){ $scope.error = error; });
上面添加nojsoncallback=1
答案是正确的,但我想提供更多的背景和推理。
如果你看看文档(在我看来格式不正确): https : //www.flickr.com/services/api/response.json.html并一直滚动到底部你会发现,藏起来远:
Callback Function If you just want the raw JSON, with no function wrapper, add the parameter nojsoncallback with a value of 1 to your request. To define your own callback function name, add the parameter jsoncallback with your desired name as the value. nojsoncallback=1 -> {...} jsoncallback=wooYay -> wooYay({...});
关键部分是: 如果您只想要原始JSON,没有函数包装器,请将值为1的参数nojsoncallback添加到您的请求中
因此,将此添加到您的请求中它将删除您在响应中看到的jsonFlickrAPI
包装: nojsoncallback=1