我是API新手,第一次尝试使用Flickr API创建一个库,但我真的很难让它正常工作。
我已经正确地创建了url,如果我直接在url中插入搜索参数,当我控制台日志时,我可以看到正确的图像列表。当我试图将参数从变量传递到url时,就会出现这个问题。错误表现为两种不同的方式,这取决于我是将url变量放在参数变量之前还是之后。
案例1:
var url = `https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXXXXXXXXXXX&text=${searchWord}&per_page=${perPage}&page=${page}&format=json&nojsoncallback=1`;
var searchWord = document.getElementById('input').value;
var perPage = 50;
var page = 1;
在这种情况下,它将控制台日志数据,但使用自己选择的参数。
案例2:
var searchWord = document.getElementById('input').value;
var perPage = 50;
var page = 1;
var url = `https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXXXXXXXXXXX&text=${searchWord}&per_page=${perPage}&page=${page}&format=json&nojsoncallback=1`;
在这种情况下,它将返回以下错误消息:{stat:"fail",代码:3,消息:"已禁用无参数搜索。请改用flickr.photos.getRecent。"}
我似乎没有正确地将参数传递到url,因为我在尝试创建库本身时也遇到了问题,当我试图将必要的id从API数组中的图像传递到我正在创建的图像url时,这些参数最终都是未定义的。
这是我写的代码:
function createGallery(photos) {
for (let photo of Object.keys(photos)) {
const imgElem = document.createElement('li');
imgElem.innerHTML = `<img src='https://farm{${photo.farm}}.staticflickr.com/{${photo.server}}/{${photo.id}}_{${photo.secret}}_[mstzb].jpg'></img>`;
imgElem.setAttribute('img-id', photo.id);
gallery.append(imgElem);
}
}
只是为了概述一下,这里是我的JS的最后一点:
//Fetch API
async function start() {
const response = await fetch (url)
const data = await response.json()
console.log(data)
createGallery(data)
}
//Call functions
search()
这是我的HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<main>
<input type="text" id="input">
<button id="search">Go</button>
<ul id="gallery"></ul>
</main>
<script src="script.js"></script>
</body>
</html>
谁能解释我做错了什么??提前感谢:(
编辑:我试着用加号而不是模板文字来附加变量,比如:
var url = 'https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXXXXXXXXXXX&text='+searchWord+'&per_page='+perPage+'&page='+page+'&format=json&nojsoncallback=1';
但这两种方法给出的结果完全相同。
您基本上是错误地追加了参数。
您有以下内容:
var perPage = 50;
var page = 1;
var url = `https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXXXXXXXXXXX&text=${searchWord}&per_page=${perPage}&page=${page}&format=json&nojsoncallback=1`;
当你定义这个url时,它应该类似于这个。。
var url = `https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXXXXXXXXXXX&text=' + searchWord + '&per_page=' + perPage + '&page=' + page + '&format=json&nojsoncallback=1'
请注意这里的区别,我们实际上只是通过将JS变量附加到String来构建url-var。没有${}访问声明的页面和perPage JS变量。。。