skip to Main Content

I have a loop inside another loop and trying to throw a variable out of inner loop but i get error:

addorder:524 Uncaught ReferenceError: productPrice is not defined

This is my success ajax code that runs these loops:

success: function(data) {

    // تبدیل اطلاعات قیمت و موتور ها به جیسون
    const objofproduct = JSON.parse(data.products);
    const objofprice = JSON.parse(data.prices);
    console.log(objofprice[0].productCode);;
    // صفر لحاظ کردن متغیر فرضی
    var i = 0;
    
    // لوپ تولید آیتم هر شهر
    jQuery.each(objofproduct, function(){
        
        var e = 0;
        jQuery.each(objofprice, function() {
            console.log(objofprice[e].id);
            if(objofprice[e].productCode == objofproduct[i].productCode) {
                var productPrice = [objofprice[e].basePrice];
                console.log(productPrice[0]);
                var z = z + 1;
            } else {
                console.log('برای محصول قیمت تعریف نشده است');
                var z = z + 1;
            };
        });
        console.log(productPrice[0]);
        // تعریف کد اچ تی ام ال قابل تکرار در صفحه
        var productitem = "<div class='mymotor grid grid-cols-3 p-4 my-4 rounded-lg border-2 hover:bg-slate-100'> <div class='col-span-1 pl-4'><img class='w-full rounded-lg hover:shadow' src='"+objofproduct[i].imageUrl+"'/></div><div class='descriptionbig m-3 col-span-2 grid grid-cols-1 flex h-min'><div class='name pb-6 col-span-1 ltr w-full flex items-center h-fit font-semibold antialiased'><div class='w-2/3 flex justify-end'>"+objofproduct[i].brandName+" "+objofproduct[i].modelName+" "+objofproduct[i].tipName+"</div><div class='w-1/3 productcode font-light text-sm flex justify-start'>"+objofproduct[i].productCode+"</div></div><div class='text-lg'><b>» رنگ:</b> "+objofproduct[i].colorName+" <br> <b>» توضیحات:</b> "+objofproduct[i].description+"<br>"+productPrice[0]+"</div></div></div>";
        // تعیین ساختار مادر ایکس و کدی که باید هر بار اضافه شود
        $("#productx").append(productitem);
        // افزودن یک عدد به متغیر فرضی
        i = i + 1 ;
    })
    // پایان لوپ آیتم هر شهر

},
// پایان موفقیت```

I tried to set array for variable but it wasn’t successful.

2

Answers


  1. Chosen as BEST ANSWER

    I used result in jQuery loop and this is final code:

    // در صورت موفقیت
            success: function(data) {
    
                // تبدیل اطلاعات قیمت و موتور ها به جیسون
                const objofproduct = JSON.parse(data.products);
                const objofprice = JSON.parse(data.prices);
                console.log(objofprice[0].productCode);;
                // صفر لحاظ کردن متغیر فرضی
                var i = 0;
                
                // لوپ تولید آیتم هر شهر
                jQuery.each(objofproduct, function(){
                    var productPrice;
                    var e = 0;
                    jQuery.each(objofprice, function() {
                        console.log(objofprice[e].id);
                        if(objofprice[e].productCode == objofproduct[i].productCode) {
                            var productPrice = [objofprice[e].basePrice];
                            result = productPrice;
                            console.log(productPrice[0]);
                            var z = z + 1;
                        } else {
                            console.log('برای محصول قیمت تعریف نشده است');
                            
                        };
                    });
                    console.log(result[0]);
                    // تعریف کد اچ تی ام ال قابل تکرار در صفحه
                    var productitem = "<div class='mymotor grid grid-cols-3 p-4 my-4 rounded-lg border-2 hover:bg-slate-100'> <div class='col-span-1 pl-4'><img class='w-full rounded-lg hover:shadow' src='"+objofproduct[i].imageUrl+"'/></div><div class='descriptionbig m-3 col-span-2 grid grid-cols-1 flex h-min'><div class='name pb-6 col-span-1 ltr w-full flex items-center h-fit font-semibold antialiased'><div class='w-2/3 flex justify-end'>"+objofproduct[i].brandName+" "+objofproduct[i].modelName+" "+objofproduct[i].tipName+"</div><div class='w-1/3 productcode font-light text-sm flex justify-start'>"+objofproduct[i].productCode+"</div></div><div class='text-lg'><b>» رنگ:</b> "+objofproduct[i].colorName+" <br> <b>» توضیحات:</b> "+objofproduct[i].description+"<br></div></div></div>";
                    // تعیین ساختار مادر ایکس و کدی که باید هر بار اضافه شود
                    $("#productx").append(productitem);
                    // افزودن یک عدد به متغیر فرضی
                    i = i + 1 ;
                })
                // پایان لوپ آیتم هر شهر
    
            },
            // پایان موفقیت
    

  2. If you use var to declare a variable, it will be scoped to the function where it is declared.

    To access productPrice in the outer loop, you need to declare it outside the scope of the inner loop.

    The relevant part of your code becomes

    jQuery.each(objofproduct, function(){
        var productPrice; // productPrice is declared here to make it accessible in both loops
        var e = 0;
        jQuery.each(objofprice, function() {
            console.log(objofprice[e].id);
            if(objofprice[e].productCode == objofproduct[i].productCode) {
                var productPrice = [objofprice[e].basePrice];
                console.log(productPrice[0]);
                var z = z + 1;
            } else {
                console.log('برای محصول قیمت تعریف نشده است');
                var z = z + 1;
            };
        });
        console.log(productPrice[0]);
       // rest of code..
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search