如何从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