0

please i have this probleme when i try to get or post or delete data from a local server (Laravel) it's work fine with json fake server but when i use local server i get this error :

Access to fetch at 'http://127.0.0.1:8000/api/eleves' from origin 'http://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

this my javascript code

//aficher les etudients
const url = 'http://127.0.0.1:8000/api/eleves' ;
const afficherEtudiants =(data) => {
  for (var etudiants in data) {
        resultat += `
        <tbody>
          <tr >
            <td>${data[etudiants].id}</td>
            <td class="nomPrenom" >${data[etudiants].Nom}</td>
            <td class="niveau">${data[etudiants].Niveau}</td>
            <td class="dateNaissance">${data[etudiants].DateNaissance}</td>
            <td class="codeMassar">${data[etudiants].CodeMassar}</td>
            <td class="imageEtu"><img class="rounded imageEtu" width="80" height="80" src="${data[etudiants].Image}" alt=""></td>
            <td><button class="btnModifier btn btn-primary btn-sm" id="modifier-etudient" >Modifier</button></td>
            <td data-id=${data[etudiants].id}><button type="button" class="btn btn-danger btn-sm" id="supprimer-etudient">Supprimer</button></td>
          </tr>

        </tbody>
     
        ` ;
    };
    etudiantList.innerHTML = resultat ;
}

//afficher les étudiants

fetch(url) 
.then(res => res.json()) 
.then(data => afficherEtudiants(data)) 


//Delete  

etudiantList.addEventListener('click', (e)=>{
    e.preventDefault() ; 
    let suppButtonClick = e.target.id == 'supprimer-etudient' ;
    let modButtonClick = e.target.id == 'modifier-etudient' ; 

    let id = e.target.parentElement.dataset.id;
    //supprimer un etudiant 

    if(suppButtonClick){
       fetch(`${url}/${id}`,{
           method:'DELETE',
           headers:{
            'Content-Type' : 'application/json' ,
            "Accept": "application/json, text-plain, */*",
            "X-Requested-With": "XMLHttpRequest",
         },
           

       })
       .then(res => res.json() )
       .then(() => location.reload())
    }

    if(modButtonClick) {
      const parent = e.target.parentElement.parentElement ; 


      let nomCont = parent.querySelector('.nomPrenom').textContent ;
      let niveauCont = parent.querySelector('.niveau').textContent ;
      let naissanceCont = parent.querySelector('.dateNaissance').textContent ;
      let massarCont = parent.querySelector('.codeMassar').textContent ;
      let imageCont = parent.querySelector('.imageEtu').textContent ;

      NomValeur.value = nomCont ; 
      NiveauValeur.value = niveauCont ; 
      NaissanceValeur.value = naissanceCont ; 
      MassarValeur.value = massarCont ; 
      ImageValeur.value = imageCont ; 
  }

    // mise a jour les info de etudiant 

  btnSubmit.addEventListener('click' , (e) => {
        e.preventDefault();
    fetch(`${url}/${id}`,{
        method:'PATCH',
        headers:{
            'Content-Type' : 'application/json' ,
            "Accept": "application/json, text-plain, */*"

        },

    body:JSON.stringify({
            Nom:NomValeur.value,
            Niveau:NiveauValeur.value,
            DateNaissance:NaissanceValeur.value,
            CodeMassar:MassarValeur.value,
            Image:ImageValeur.value

        }) 
    })

    .then(res => res.json() )
    .then(() => location.reload())

    })

} ) ;


//ajouter etudiant 
ajouterEtudiant.addEventListener('submit', (e) =>{
    e.preventDefault() ;

    fetch(url,{
        method:'POST',
        headers:{
          "Content-Type": "application/json",
          "Accept": "application/json, text-plain, */*",
          'Content-Type': 'multipart/form-data;',
          'Access-Control-Allow-Origin':'*'
          
        },

     body:JSON.stringify({
            Nom:NomValeur.value,
            Niveau:NiveauValeur.value,
            DateNaissance:NaissanceValeur.value,
            CodeMassar:MassarValeur.value,
            Image:ImageValeur.value

        }) 

    })
    .then(res => res.json())
    .then(data => {
        const dataArr =[] ; 
        dataArr.push(data) ; 
        afficherEtudiants(data);
    })
})

1 Answers1

0

The error says you display the page on localhost, but make the api call to 127.0.0.1:8000.

If you use Sanctum to authenticate your frontend, your app and API must share the same top-level domain.

Use relative paths like "/api/eleves". You don't need the previous part.

I also suggest you use Axios to make api calls insted of fetch.

Bulent
  • 3,307
  • 1
  • 14
  • 22