Как отправить запрос POST XHR с FormData в том же формате, что и при использовании кнопки «Отправить»? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть <form>, который я обычно отправляю с помощью кнопки submit:

<form action='/doit' method='post'>
<input type='text' name='ex1_q1' value='AAA'>
<input type='text' name='ex2_q1' value='BVB'>
<input type='submit' value='Go'>
</form>

Это работает.

Каждые 10 секунд я также хочу (молча, в фоновом режиме) отправьте это <form> содержимое с AJAX. Однако я заметил, что при этом:

setInterval(function() {
    var fd = new FormData(document.querySelector('form'));
    fd.append("dt", +new Date);    
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "/doit");
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(fd); 
}, 10 * 1000);

данные действительно отправляются, но сервер не получает их в том же формате , что при отправке с помощью кнопки «Отправить».

Точнее:

  1. при отправке с Ajax / XHR тело выглядит примерно так:

    b'------WebKitFormBoundaryQb7yIKHLZODhAjqI\r\nContent-Disposition: form-data; name="ex1_q1"\r\n\r\nAAA\r\n------WebK
    
  2. при отправке с помощью кнопки Отправить я получаю:

    b'ex1_q1=AAA&ex2_q1=BVB&accept=on&numero=1'
    

    , что мне нужно во всех случаях

Вопрос: с запросом XHR, как получить данные отправляются в том же формате, что и кнопка «Отправить» (случай 2)?

1 Ответ

0 голосов
/ 08 апреля 2020

В зависимости от атрибута enctype данные формы представляются как «application / x- www-form-urlencoded» или «multipart / form-data».

Объект FormData всегда будет кодировать данные как « multipart / form-data ".

Если вы хотите" application / x- www-form-urlencoded ", тогда вы должны использовать объект URLSearchParams.

...