Usar in_array para comparar dados de array não funciona [fechado]

Oct 25 2020

Como você pode ver na foto, vários produtos. Cada div do produto tem um removebotão. Quando eu clico neste botão, o nome do produto daquele produto específico é armazenado em uma toBeRemovedvariável JS. Preciso enviar essa variável para o PHP. Para perceber isso, usei o método Ajax Get, no qual passo a variável por meio do URL:

CÓDIGO HTML:

<p><button class="btn-remove">Remove</button></p>

Código Javascript:

const removeBtn = document.querySelectorAll('.btn-remove');

removeBtn.forEach((item) => {
    item.addEventListener('click', function() {
        const toBeRemovedName = item.parentNode.parentNode.children[0].innerHTML;

        $.ajax({
            url: "./shopping_cart.php?toBeRemovedName=" + toBeRemovedName,
            method: "GET"
        });
    });
});

Meu script PHP já contém um array com todos os nomes de produtos que você pode ver na imagem ( $_SESSION['name_arr']). O que eu gostaria de fazer é: comparar a variável toBeRemovedNamecom todos os elementos do array. Se verdadeiro -> remova aquele nome do array. O problema: parece que a $removevariável não obtém as informações passadas em Javascript? Já tenho alguns exemplos de código:

CÓDIGO PHP:

<?php
    session_start();

    //contains all the product names that you can see on the picture
    $name_arr = $_SESSION['name_arr']; if(isset($_GET['toBeRemovedName'])) {
        $remove = $_GET['toBeRemovedName'];
        for($i=0; $i<sizeof($name_arr); $i++) {
            if(in_array($remove, $name_arr)) {
                array_splice($name_arr, $i, 1);
            }
        }
    }
?>

Respostas

1 stephenwonder Oct 25 2020 at 22:33

Também há um bug em seu código Js.

Substitua seu código Js por este e tente novamente.

let removeBtn = document.querySelectorAll('.btn-remove');
removeBtn = [...removeBtn];

removeBtn.forEach((item) => {
    item.addEventListener('click', function() {
        const toBeRemovedName = item.parentNode.parentNode.children[0].innerHTML;

        $.ajax({
            url: "./shopping_cart.php?toBeRemovedName=" + toBeRemovedName,
            method: "GET"
        });
    });
});

Por que não ocultar o elemento com JavaScript em vez de um código de status HTTP de 200. Além disso, se o elemento foi removido como você mencionou em um de seus comentários, ocultá-lo com JavaScript será uma opção melhor e você terá uma boa experiência do usuário também . Ninguém gosta de recarregar a página atualmente. Se você quiser recarregar, pode fazer isso com javascript usando o código abaixo.

 window.location.reload()

Isso também lhe proporcionaria um recarregamento da janela.