PUT-запрос к REST API, работающий в Postman, но не при использовании Fetch - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь написать код, чтобы я мог изменить данные API через веб-сайт, используя API загрузки - вот код

const url = 'https://oafc.herokuapp.com/api/players';
const nameDropdown = document.getElementById('nameDropdown');
const nameInput = document.getElementById('name');
const assistsInput = document.getElementById('assists');
const goalsInput = document.getElementById('goals');
const editPlayerSubmit = document.getElementById('editPlayerSubmit');

//Fill select with players fill inputs
function getPlayers(){
    fetch(url)
    .then((res) => res.json())
    .then((data) => {
        //Fill Select
        for(i = 0; i< data.length; i++){
            createOption(data[i].name , i);
        };
        function createOption(val , num){
            let elem = document.createElement("option");
            elem.innerHTML =  val;
            elem.value = num;
            nameDropdown.appendChild(elem);
        }
    })
}
//Change inputs on name change
nameDropdown.addEventListener('change', () => {
    fetch('https://oafc.herokuapp.com/api/players')
    .then((res) => res.json())
    .then((data) => {
        let selected = nameDropdown.value;
        let goals = data[selected].goals;
        let name = data[selected].name;
        let assists = data[selected].assists;
        let id = data[selected]._id;
        console.log(id);
        goalsInput.value = goals;
        nameInput.value = name;
        assistsInput.value = assists;
    })
});
getPlayers();
//When edit player submit btn is pressed
editPlayerSubmit.addEventListener('click', () => {
    fetch(url)
    .then((res) => res.json())
    .then((data) => {
        urlWithId = `https://oafc.herokuapp.com/api/players/${data[nameDropdown.value]._id}`;
        let bodyData = {
            name: nameInput.value,
            goals: goalsInput.value,
            asists: assistsInput.value
        };
        fetch(urlWithId, {
            method: 'PUT',
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify(bodyData)
        })
        .then(response => response.json());
    })

});
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Site Title</title>
    <!-- Stylesheets -->
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div class="editPlayer">
    <h1>Edit Player</h1>
        <select id="nameDropdown"></select>
        <br>
        Name: <input type="text" id="name">
        <br>
        Goals: <input type="number" id="goals">
        <br>
        Assists: <input type="number" id="assists">
        <br>
        <button id="editPlayerSubmit">Submit</button>
    </div>
    <!-- Scripts -->
    <script src="js/script.js"></script>
</body>
</html>

Я разработал API сам, и запросы PUT работают через почтальона, поэтому я знаю, что все мои настройки CORS верны.GET Запросы работают, так что я думаю, что, возможно, я запутался в написанном мною коде, и поэтому он не работает

1 Ответ

0 голосов
/ 31 мая 2018

Я получаю

Failed to load https://oafc.herokuapp.com/api/players/5b0f171cacc1580004d5c07c: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

Когда я запускаю ваш фрагмент.

Посмотрите на этот ответ , чтобы настроить приложение heroku.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...