Recibir datos mediante POST en PHP utilizando fetch JavaScript

publicado por: Anonymous

estoy intentando enviar datos mediante utilizando fetch a un servidor PHP el asunto es que no se como accedo desde PHP a dicha propiedad, aquí dejo mi código
JS:

function obtenerDatosSuma(e){

    e.preventDefault();

    //ALMACENAR LOS DATOS DEL FORMULARIO

    var mes = document.getElementById("selector").value;
    var cant_archivos = document.getElementById("archivos_input").value;
    var num_celda = document.getElementById("celda_num").value;


    var data2 = {

            mes: mes,
            num_archivos: cant_archivos,
            numero_celd: num_celda
    };



    fetch('http://localhost/PHP/controller/pruebaFetch.php', {
        method: 'POST',
        body: data2 
    })
    .then(function(data){

        return data.json();
    })
    .then(myJson => { 

        console.log(myJson);

    });

}

Pero desde PHP estoy intentando acceder a ello con esto:

$datos = $_POST['data2'];

Esto me lanza el error de que no esta definido data2

Notice: Undefined index: data2 in
C:xampphtdocsPHPcontrollerpruebaFetch.php on line 3

La verdad no tengo idea de como se recogen los datos.

EDIT: Aqui mi codigo HTML

<form action="../controller/CalcularValor.php" method="post" id="form-suma" enctype="multipart/form-data">
    <div class="form-row">

        <div class="form-group col-sm-5">
            <label for="selector">MES</label>
            <select name="selector" id="selector" class="form-control">
                <option value="ENERO">ENERO</option>
                <option value="FEBRERO">FEBRERO</option>
                <option value="MARZO">MARZO</option>
                <option value="ABRIL">ABRIL</option>
                <option value="MAYO">MAYO</option>
                <option value="JUNIO">JUNIO</option>
                <option value="JULIO">JULIO</option>
                <option value="AGOSTO">AGOSTO</option>
                <option value="SEPTIEMBRE">SEPTIEMBRE</option>
                <option value="OCTUBRE">OCTUBRE</option>
                <option value="NOVIEMBRE">NOVIEMBRE</option>
                <option value="DICIEMBRE">DICIEMBRE</option>
            </select>
        </div>

    </div>

    <div class="form-row">
        <div class="form-group col-sm-5">
            <label for="archivos_input">Numero de archivos</label>
            <input type="number" name="archivos_input" id="archivos_input" class="form-control">
        </div>
    </div>

    <div class="form-row">
        <div class="form-group col-sm-5">
            <label for="celda_num">NUMERO DE CELDA(Ej: A35)</label>
            <input type="text" name="celda_num" id="celda_num" class="form-control">
        </div>
    </div>

    <div class="form-row">
        <div class="form-group col-sm-5">
            <input type="submit" value="Calcular" class="btn btn-primary" id="btn_calcular">
        </div>
    </div>

</form>

solución

Te comento que lo puedes hacer de este modo, mediante el uso de FormData

Aquí accedes a los valores directo desde el form de tu página web

let formulario = new FormData(document.getElementById("iddetuformulario"))

Posterior puedes construir tu envio de datos con Fetch de este modo, donde como segundo argumento a la función le pasas la key method para indicar que tipo de verbo HTTP será, asì como en la etiqueta body el value formulario

fetch('http://localhost/PHP/controller/pruebaFetch.php', {
     method: "post",
     body: formulario
}).then((response) => {
     /*acciones a realizar*/     
}).then((data) => {
     /*mas acciones a realizar*/
})

De tal modo que puedas acceder a los elementos en PHP de este modo

$datos = $_POST['data2'];

Aclaración

Como estamos accediendo directamete al form por medio de su id, entonces no hay necesidad de declarar una variable distinta para capturar cada input que tiene el mismo dentro de si; es decir solo debes tener una variable con la cual lo accedas y después en tu petición fetch hagas body: data

Una vez hecho lo anterior, desde PHP accedes pero por medio de su atributo name, es decir

//debe ser de este modo
$dato = $_POST['name1'];
Respondido por: user75901

Leave a Reply

Your email address will not be published. Required fields are marked *