javascript - window.location 结果为空

标签 javascript firebase dom firebase-realtime-database

我想建立一个从数据库返回产品的网站,当单击“查看更多”时,应该在另一个 html 页面中从服务器返回产品详细信息。问题是,当我单击“查看更多”时,productID%20=%20null :(。
产品详细信息 = 第二个 html 页面。 ProductDetails = div - 在index.html 中,其中产品从服务器返回

<script>
var productsUrlList = 'https://finalonlineshop.firebaseio.com/.json';
async function getProductsFromServer() {
    var productsResponse = await fetch(productsUrlList)
    var products = await productsResponse.json();
    return products;
}

async function showProducts(productsPromise) {
    var products = await productsPromise;
    var generatedHTML = '';
    var productsIDs = Object.keys(products);
    productsIDs.forEach(productID => {
        var product = products[productID];
        generatedHTML += getGeneratedHTMLForProduct(productID, product);
    });
    document.getElementById('categories').innerHTML = generatedHTML;
}

function getGeneratedHTMLForProduct(productID, product) {
    var generatedHTML = `
        <div id = categoriesDiv>
            <img class = "categoryImage" src = ${product.Image} />
            <div class = "categoryName">${product.Name}</div>
            <div class = "categoryPrice">$ ${product.Price}</div>
            <br>
            <button id = "seeMore" onclick = "seeMore('${productID}')">See 
    more</button>
        </div>
    `;
    return generatedHTML;
}

function seeMore (productID) {
    window.location = `./productDetails.html?productID = ${productID}`;//issue
}
function getProductIDFromUrl () {
var params = new URLSearchParams(window.location.search);
var productID = params.get('productID');
return productID;
}

async function getDetailsFromServer(productID) {
var detailsResponse = await fetch(`https://finalonlineshop.firebaseio.com/Products/details/${productID}.json`);
var details = await detailsResponse.json();
return details;
}

async function seeDetails(detailsPromise) {
var details = await detailsPromise;
var generatedHTML = `
    <div id = "detailsAboutProduct">
        <img src = "${details.Image}" /> //Cannot read property "Image" of null
        <div>${details.Name}</div>
        <div>${details.Details}</div>
        <div>$ ${details.Price}</div>
        <div>${details.Qty}</div>
        <button id = "addToCart" onclick = "addToCart();">Add to 
    cart</button>
    </div>
`;
document.getElementById('details').innerHTML = generatedHTML;
}

</script>

最佳答案

去掉 URL 中 = 周围的空格,编码为 %20。您还应该使用 encodeURIComponent() 转义产品 ID 中的任何特殊字符。

function seeMore (productID) {
    window.location = `./productDetails.html?productID=${encodeURIComponent(productID)}`;
}

关于javascript - window.location 结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52170562/

相关文章:

javascript - Selectize.js - 强制从选择中至少选择一项

javascript - 在两列中显示 <ul> 的元素

javascript - 如何用 JavaScript 中的 DOM 操作函数替换元素内容?

javascript - 如何识别特定的输入字段并将其值设置为空

android - Firebase 数据库依赖项使应用程序崩溃

java - 如何读取多个子节点并获取值

javascript - jQuery 处理多个事件不起作用

javascript - 使用 moment.js 和 setInterval 的动态日期和时间

angular - 如何使用 Angular 4 应用程序缓存 Firebase 存储中的所有产品图像(大约 1000 个)?

android - flutter 错误 "the method ' toLowerCase( )' was called on null"