我正在尝试使用以下网址中的ID来访问特定产品,
https://tempstore.myshopify.com/products/1234.json
它给我404错误。
虽然,我能够访问以下所有产品:
https://tempstore.myshopify.com/products.json
我必须访问刚结账过程中处理过的产品
我的身份如下:
var products = Shopify.checkout.line_items;
产品将包含一系列产品ID,仅在结帐时处理。
现在我需要访问这些产品的所有其他属性。
我当然可以这样做:
https://tempstore.myshopify.com/admin/products/1234.json
但它需要身份验证 有什么想法吗?
答案 0 :(得分:3)
从前端,你需要有产品句柄来获取JSON对象:
https://tempstore.myshopify.com/products/[handle].js
或
https://tempstore.myshopify.com/products/[handle].json
(请注意,.js
和.json
端点的返回值彼此差异很大!)
就像你指出的那样,Shopify.checkout.line_items对象数组只有产品ID,不是产品句柄。但是,我们并非完全没有运气,因为我们可以通过点击/products.json
端点获取商店中的整个产品列表,包括产品句柄。
当然,这意味着抓取一个潜在巨大的JSON对象只是为了获取我们应该包含在结帐行项目中的信息......但除非有一些备用的源项信息来源在结帐页面上提供,循环遍历整个列表可能是您需要做的。
所以你的结束代码看起来像这样:
Checkout.jQuery.getJSON( // Or whatever your preferred way of getting info is
'https://tempstore.myshopify.com/products.json',
function(prodlist){
for(var p = 0; p < prodlist.length; p++){
var prod = prodlist[p];
// Find if Shopify.checkout.line_items contains prod.id, left as exercise for the reader
if(found){
Checkout.jQuery.getJSON(
'https://tempstore.myshopify.com/products/' + prod.handle + '.js',
function(product){
/* Whatever needs to be done */
})
}
}
}
)
希望这有帮助!
答案 1 :(得分:1)
var shop = Shopify.shop;
var lineItems = Shopify.checkout.line_items;
var url = 'https://' + shop + '/products.json?callback=?';
var requiredData = [];
$.getJSON(url).done(function(data){
lineItems.forEach(function(lineItemProduct){
data.products.find(function(product){
if(lineItemProduct.product_id == product.id){
requiredData.push(product);
}
});
});
});
console.log(requiredData);
这就是我解决它的方式,如果它可以帮助任何人:)