Почтальон работает, но fetch () - нет. Почему бы и нет?

Вот мой подход к этому, я надеюсь, что он делает то, что вы хотите. Он удаляет класс active из первого элемента этого класса, обменивает его с классом step-done, а затем добавляет класс active к следующему шагу - он должен работать для всех четырех шагов.

$('#advance').click(function(){
  var active = $(".nav-tabs .active:first");
  active.removeClass("active");
  active.addClass("step-done");
  active.next("li").addClass("active");
});
.active{
  background:yellow;
}
.step-done{
  background:lime;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav nav-tabs" role="tablist">
    <li role="presentation" class="active">
        <a aria-controls="select-room"><span class="mg-bs-tab-num">1</span><span class="mg-bs-bar"></span>Select Room</a>
    </li>
    <li role="presentation" class="">
        <a aria-controls="personal-info"><span class="mg-bs-tab-num">2</span><span class="mg-bs-bar"></span>Personal Info</a>
    </li>
    <li role="presentation">
        <a aria-controls="payment"><span class="mg-bs-tab-num">3</span><span class="mg-bs-bar"></span>Payment</a>
    </li>
    <li role="presentation">
        <a aria-controls="thank-you"><span class="mg-bs-tab-num">4</span>Thank You</a>
    </li>
</ul>
<button id="advance">Advance Step</button>

1
задан NewbieAid 19 January 2019 в 07:36
поделиться

1 ответ

Тело запроса x-www-form-urlencoded должно быть name=BARNEY%20MCGREW%21&rating=90.

Вы отправляете запрос по fetch с телом '{"name":"BARNEY MCGREW!","rating":90}'.

Поскольку нет =, вся строка JSON считается именем параметра с пустым значением.

Итак, вам дан объект из req.body, где в качестве ключа выступает строковый JSON.


Создайте URLSearchParams, передав ваши данные конструктору - замените JSON.stringify.

fetch('http://localhost:1234/acts/create', {
    method: 'POST',
    headers: {
        "Content-Type": "application/x-www-form-urlencoded",
    },
    body: new URLSearchParams({
        name: 'BARNEY MCGREW!',
        rating: 90,
    })
})

Ваше тело запроса fetch теперь должно быть name=BARNEY%20MCGREW%21&rating=90.

Это будет правильно проанализировано анализатором тела как содержимое x-www-form-urlencoded.


Если URLSearchParams не определено, есть пакеты npm, которые его предоставят. В противном случае все, что он делает, это создает строку URL-параметров путем кодирования и объединения ключей и значений с помощью = и объединения каждой пары с помощью &, что можно сделать следующим образом:

function URLSearchParams(data) {
    return Object.keys(data).map(key => {
        return `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`;
    }).join('&');
}
0
ответ дан Callam 19 January 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: