javascript - 对 Flickr API 的 AJAX 请求返回 0 结果,但适用于curl/postman

标签 javascript jquery ajax flickr

我正在构建一个单页 Web 应用程序,它向 Flickr 发出 AJAX 请求(使用 Flickr API)。当我使用curl或 postman 尝试请求时,它起作用了。当我使用 AJAX (jQuery) 在 Chrome 中尝试时,我收到了 200 响应,状态为“OK”,但始终为 0 结果。如果我将完全相同的 URL(字面意思是复制并粘贴)放入 postman/curl 中,我会得到结果。我一定是在做一些愚蠢的事情,但我无法弄清楚。

JavaScript 代码:

var photoQueryURL = 'https://api.flickr.com/services/rest/?' + $.param({
    'method': 'flickr.photos.search',
    'api_key': flickrAPIKey,
    'text': title,
    'tags': title,
    'format': 'json',
    'nojsoncallback': '1'
});
// AJAX Query:
$.ajax(photoQueryURL)
    .done(function(data) {
        console.log('Sucessful query.');
        console.log(data);
    })
    .fail(function(err) {
        console.log('Failed query.');
        console.log(err);
    });

AJAX 查询:

Request URL:https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=<my-key>&text=Alex%27s%20Pizzeria&tags=Alex%27s%20Pizzeria&format=json&nojsoncallback=1
Request Method:GET
Status Code:200 
Remote Address:69.147.64.33:443
Referrer Policy:no-referrer-when-downgrade
Response Headers
access-control-allow-origin:*
age:2
cache-control:private
content-encoding:gzip
content-length:83
content-type:application/json
date:Sat, 28 Oct 2017 21:59:02 GMT
p3p:policyref="https://policies.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV"
server:ATS
status:200
vary:Accept-Encoding
via:http/1.1 fts126.flickr.bf1.yahoo.com (ApacheTrafficServer [cMsSf ]), http/1.1 e22.ycpi.cha.yahoo.com (ApacheTrafficServer [cMsSf ])
x-content-type-options:nosniff
x-frame-options:SAMEORIGIN
x-served-by:www-bm006.flickr.bf1.yahoo.com
Request Headers
:authority:api.flickr.com
:method:GET
:path:/services/rest/?method=flickr.photos.search&api_key=<my-key>&text=Alex%27s%20Pizzeria&tags=Alex%27s%20Pizzeria&format=json&nojsoncallback=1
:scheme:https
accept:application/json, text/javascript, */*; q=0.01
accept-encoding:gzip, deflate, br
accept-language:en-US,en;q=0.9
cache-control:no-cache
origin:null
pragma:no-cache
user-agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36
Query String Parameters
view source
view URL encoded
method:flickr.photos.search
api_key:<my-key>
text:Alex's Pizzeria
tags:Alex's Pizzeria
format:json
nojsoncallback:1

AJAX 响应:

{"photos":{"page":1,"pages":0,"perpage":100,"total":"0","photo":[]},"stat":"ok"}

使用curl查询:

curl -k "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=<my-key>&text=Alex%27s%20Pizza&tags=Alex%27s%20Pizza&format=json&nojsoncallback=1"

回复(通知5个结果):

{"photos": {"page": 1, "pages": 1, "perpage": 100, "total": "5",
"photo": [{"id":(...)}]},
"stat":"ok"}

建议?

--吉姆

最佳答案

您的代码是正确的。我创建了一个 Flickr 帐户来重现您的问题。

我添加了以下代码来打印结果:

var len = data.photos.photo.length, html = "";
if (len > 0) {
  var i;
  for (i = 0; i < len; i++) {
    html += "<li>";
    html += data.photos.photo[i].title;
    html += "</li>";
  }
  $("#list").html(html);
}

类似这样的事情:

(function() {
  $("#form").on("submit", function(e) {
    var flickrAPIKey = "39417c145483a7fb3ee91c5fe5bc93fe",
      title = $("#txtInput").val();
    var photoQueryURL = 'https://api.flickr.com/services/rest/?' + $.param({
      'method': 'flickr.photos.search',
      'api_key': flickrAPIKey,
      'text': title,
      'tags': title,
      'format': 'json',
      'nojsoncallback': '1'
    });
    // AJAX Query:
    $.ajax(photoQueryURL)
      .done(function(data) {
        console.log('Sucessful query.');
        var len = data.photos.photo.length, html = "";
        if (len > 0) {
          var i;
          for (i = 0; i < len; i++) {
            html += "<li>";
            html += data.photos.photo[i].title;
            html += "</li>";
          }
          $("#list").html(html);
        }
      })
      .fail(function(err) {
        console.log('Failed query.');
        console.log(err);
      });
    e.preventDefault();
  });
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form id="form">
  <label for="txtInput">Input:</label>
  <input id="txtInput" type="text" />
  <button type="submit">Send</button>
  <hr />
  <ul id="list"></ul>
</form>

存在 Access-Control-Allow-Origin: * header 。

enter image description here

关于javascript - 对 Flickr API 的 AJAX 请求返回 0 结果,但适用于curl/postman,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995000/

相关文章:

javascript - 类标签中所有值的总和

javascript - 在 Webpack 中分离外部

javascript - 有没有办法从浏览器外部运行的程序触发 DOM 事件?

javascript - jquery 切换和平滑滚动在同一页面上发生冲突

jquery - (jQuery) 单击时更改文本

javascript - 如何在按钮可见时触发 javascript 事件?

javascript - 如何使用 Angular js 显示和 ajax 加载器 gif

php - JQuery POST 使用 Ajax 覆盖 txt 文件不起作用

javascript - VueJS 如何使用事件总线将数据传递给模态组件

javascript - 草皮.js : Buffer executing but geojson not being added to leaflet map