Existe uma maneira de enviar dados usando o método POST sem um formulário e sem atualizar a página usando apenas JavaScript puro (não jQuery $.post()
)? Talvez httprequest
ou algo mais (simplesmente não consigo encontrá-lo agora)?
140
Respostas:
Você pode enviá-lo e inserir os dados no corpo:
A propósito, para obter solicitação:
fonte
A API de busca [new-ish no momento da redação em 2017] visa facilitar as solicitações GET, mas também pode fazer o POST.
Se você é tão preguiçoso quanto eu (ou apenas prefere um atalho / ajudante):
fonte
Você pode usar o
XMLHttpRequest
objeto da seguinte maneira:Esse código seria postado
someStuff
emurl
. Apenas certifique-se de que quando você criar seuXMLHttpRequest
objeto, ele será compatível com vários navegadores. Existem inúmeros exemplos de como fazer isso.fonte
someStuff
?someStuff
pode ser o que você quiser, mesmo que seja uma string simples. você pode verificar a solicitação usando serviços online, como o meu favorito: ( requestb.in )application/x-www-form-urlencoded
tipo MIME não possui umcharset
parâmetro: iana.org/assignments/media-types/application/…Além disso, RESTful permite obter dados de volta a partir de um POST pedido.
JS (coloque static / hello.html para veicular via Python):
Servidor Python (para teste):
Log do console (chrome):
Log do console (Firefox):
Log do console (borda):
Log do Python:
fonte
Existe um método fácil de agrupar seus dados e enviá-los ao servidor como se você estivesse enviando um formulário HTML usando
POST
. você pode fazer isso usando oFormData
objeto da seguinte maneira:agora você pode manipular os dados no lado do servidor da mesma maneira que lida com formulários HTML reugulares.
Informação adicional
É recomendável que você não defina o cabeçalho Content-Type ao enviar FormData, pois o navegador cuidará disso.
fonte
FormData
criará uma solicitação de formulário com várias partes em vez de umaapplication/x-www-form-urlencoded
solicitaçãonavigator.sendBeacon ()
Se você simplesmente precisar de
POST
dados e não precisar de uma resposta do servidor, a solução mais curta seria usarnavigator.sendBeacon()
:fonte
navigator.sendBeacon
não deve ser usado para esse fim em minha opinião.Você pode usar XMLHttpRequest, buscar API, ...
Se você deseja usar XMLHttpRequest, pode fazer o seguinte
Ou se você quiser usar a API de busca
fonte
Você sabia que o JavaScript possui métodos e bibliotecas integrados para criar formulários e enviá-los?
Estou vendo muitas respostas aqui, todas pedindo para usar uma biblioteca de terceiros, o que acho um exagero.
Eu faria o seguinte em Javascript puro:
Dessa forma (A), você não precisa contar com terceiros para fazer o trabalho. (B) Está tudo embutido em todos os navegadores, (C) mais rápido, (D) funciona, fique à vontade para testá-lo.
Eu espero que isso ajude. H
fonte