【问题标题】:how to get correct JSON object from flickr API如何从 flickr API 获取正确的 JSON 对象
【发布时间】:2014-07-10 08:26:06
【问题描述】:

我使用 flickr 照片搜索方法来检索公共照片。 当我用 jquery 运行它时,它工作正常,我得到了正确格式的 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 转换为第一个。 我可以在$http 调用中做些什么或者必须更改 JSON 对象。

【问题讨论】:

    标签: javascript jquery json angularjs flickr


    【解决方案1】:

    网址有问题。 这个网址对我有用。

    https://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=3f807259749363aaa29c712fa93945&user_id=61495424@N00&format=json&nojsoncallback=?
    

    【讨论】:

      【解决方案2】:

      你必须将 nojsoncallback=1 添加到 url,像这样

      https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&api_key=XXX&format=json&nojsoncallback=1
      

      并在响应时删除 jsonFlickrApi 函数。

      【讨论】:

        【解决方案3】:

        上面说添加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

        【讨论】:

          【解决方案4】:

          您将收到 JSONP 响应(注意 P),它基本上是一个函数调用,其参数是您期望的响应。

          为您提供简单的解决方案:创建一个名为jsonFlickrApi 并带有参数response 的函数,然后您就可以在其中进行处理了。

          此时,我不确定您是否可以在服务中定义您的函数,但请尝试一下。如果没有,你可以在外面定义。

          或者,尝试改用 $http.get 函数。您是否在 jQuery 原始代码中指定了客户端接受的返回值?

          编辑

          试试这个setting the data type of the request using $http or $http.get,不要忘记在设置对象中指定数据属性。

          $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;
          });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-07-07
            • 2019-03-18
            • 2010-09-16
            • 1970-01-01
            • 2017-08-12
            • 1970-01-01
            • 2018-09-24
            • 1970-01-01
            相关资源
            最近更新 更多