javascript - 从 JSON 响应中获取图像
问题描述
我正在开发一个shopify主题。在我的主题里面。我有一个div
我正在循环的。在 div 内部,我有一个图像标签,我想将图像从我的 JSON 文件中传递,
其中 div id == 到图像 id
在我的 HTML 文件中,我有这个。
{% for order in customer.orders %}
{% for line_item in order.line_items %}
<span id="lineNumber">{{ line_item.product_id }}</span>
<div class="order-body">
<div class="row order-single">
<div class="col-12 col-md-3">
<img src="" alt="logo" class="fit-image-product" id="imglink">
</div>
...
{% endfor %}
{% else %}
<div class="container">
<div class="lg-header">
<h3>You are not Logged In</h3>
</div>
</div>
{% endif %}
在我的脚本文件中,我有这个
const lineNumberElements = document.querySelectorAll("#lineNumber");
let arrayOfLineNumbers = [];
for (const key in lineNumberElements) {
if (lineNumberElements.hasOwnProperty(key)) {
const element = lineNumberElements[key];
arrayOfLineNumbers.push(element.innerHTML);
}
console.log(arrayOfLineNumbers[key]);
}
const imgsrcElements = document.querySelectorAll("#imglink");
let arrayOfimgSrc = [];
for (const key in imgsrcElements) {
if (imgsrcElements.hasOwnProperty(key)) {
const element = imgsrcElements[key];
arrayOfimgSrc.push(element.innerHTML);
}
console.log(arrayOfimgSrc[key]);
}
const geturl = `https://website.myshopify.com//admin/api/2020-04/products.json`;
fetch(geturl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Shopify-Access-Token": "shppa_###################",
},
})
.then((response) => {
// console.log('resolved', response);
return response.json();
})
.then((data) => {
let allproducts = data.products;
console.log(allproducts);
allproducts.forEach(function (product) {
let product_id = product.id;
let product_image = product.image.src;
//console.log(product_id);
if (product_id == arrayOfLineNumbers[key]) {
console.log("how far", product_id, product_image);
arrayOfimgSrc[key] = product_image;
}
});
})
.catch((error) => {
console.error("There has been a problem with your operation:", error);
});
我一直收到错误
您的操作出现问题:ReferenceError: key is not defined
更新
我已经能够最小化我的代码并且错误已被删除,但是第一个图像被发送并循环了。
const lineNumberElements = document.querySelectorAll('#lineNumber');
const imgsrcElements = document.querySelectorAll('#imglink');
const geturl = `https://beymossweb.myshopify.com//admin/api/2020-04/products.json`
fetch(geturl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Shopify-Access-Token": "shppa_#############",
}
})
.then((response) => {
return response.json();
})
.then(data => {
let allproducts = data.products
console.log(allproducts)
allproducts.forEach(function (product) {
let product_id = product.id
let product_image = product.image.src
console.log(product_id, product_image);
for (let j = 0; j <= imgsrcElements.length; j++) {
imgsrcElements[j].src = product_image;
}
});
})
.catch(error => {
console.error('There has been a problem with your operation:', error);
});
解决方案
为了合作,这不是您描述的案例的解决方案,但我认为它可以让我们走上解决问题的轨道
注释为 helpers 的方法获取 each 的文本和 eachlineNumber
的值,src
将imglink
它们作为数组进行操作,从而解决我评论的问题for-in
在成功的获取响应中,我不清楚您在尝试什么,我知道在这一行中product_id == arrayOfLineNumbers [key]
,您想要检查数组中是否有等于的值,arrayOfLineNumbers
如果是这种情况,则此行将实现您的目标arrayOfLineNumbers.includes(product_id)
最后在这一行中,arrayOfimgSrc[key] = product_image;
您的意图尚不清楚
- 键在此上下文中不存在
- 如果是这种情况,您必须使用 push 方法,该行会尝试将 product_image 分配给数组
正如我在开始时提到的,这并不是一个解决方案,但也许通过纠正一些事情并评论我们可以达到解决方案的疑虑
// helpers
const toTextContent = (element) => element.textContent;
const toSrc = (element) => element.src;
const nodesToArray = (nodes) => Array.from(nodes);
const getTextContent = (nodes) => nodesToArray(nodes).map(toTextContent);
const getSrc = (nodes) => nodesToArray(nodes).map(toSrc);
// collections
const arrayOfLineNumbers = getTextContent(
document.querySelectorAll("#lineNumber")
);
const arrayOfimgSrc = getSrc(document.querySelectorAll("#imglink"));
// ajax
const geturl = `https://website.myshopify.com//admin/api/2020-04/products.json`;
fetch(geturl, {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Shopify-Access-Token": "shppa_###################",
},
})
.then((response) => response.json())
.then((data) => {
data.products.forEach((product) => {
let product_id = product.id;
let product_image = product.image.src;
if (arrayOfLineNumbers.includes(product_id)) {
console.log("how far", product_id, product_image);
arrayOfimgSrc[key] = product_image;
}
});
})
.catch((error) => {
console.error("There has been a problem with your operation:", error);
});
推荐阅读
- php - 使用 ajax PHP Vuejs 上传文件
- r - R - 用于合并的 Reduce 函数返回列表而不是数据框
- spring-mvc - 将 Redis/Spring Session 合并到我的应用程序中会阻止我部署应用程序
- facebook - Facebook App Review:没有 UI 的应用程序的隐私政策
- python - Bokeh 基于 ColumnDataSource 动态更新 xrange
- r - 计算几乎相等的字符串模式
- mysql - 使用 JOIN 命令更新记录
- ruby-on-rails - Rails 5.2 如何覆盖 ActiveStorage url?
- json - 使用 powershell 将 windows env 变量添加到 json 对象
- c# - 字节数组转换混淆