Gostaria de enviar alguns dados usando um XMLHttpRequest em JavaScript.
Digamos que eu tenha o seguinte formulário em HTML:
<form name="inputform" action="somewhere" method="post">
<input type="hidden" value="person" name="user">
<input type="hidden" value="password" name="pwd">
<input type="hidden" value="place" name="organization">
<input type="hidden" value="key" name="requiredkey">
</form>
Como escrever o equivalente usando um XMLHttpRequest em JavaScript?
javascript
ajax
post
xmlhttprequest
Jack Greenhill
fonte
fonte
params
vez de uma string como no jQuery?Connection
eContent-Length
cabeçalhos não podem ser definidos. Ele diz "Recusou-se a definir o cabeçalho não seguro" comprimento do conteúdo "". Veja stackoverflow.com/a/2624167/632951application/json
solicitação?Ou, se você pode contar com o suporte do navegador, pode usar o FormData :
fonte
http.setRequestHeader("Content-length", params.length);
ehttp.setRequestHeader("Connection", "close");
. Eles são necessários? Talvez eles sejam necessários apenas em determinados navegadores? (Há um comentário nessa outra página dizendo que definir o cabeçalho de comprimento do conteúdo era "exatamente o que era necessário")Content-Type
muda automaticamente paramultipart/form-data
. Isso tem sérias implicações no lado do servidor e como as informações são acessadas lá.Use JavaScript moderno!
Eu sugiro olhar
fetch
. É o equivalente do ES5 e usa Promises. É muito mais legível e facilmente personalizável.No Node.js, você precisará importar
fetch
usando:Se você deseja usá-lo de forma síncrona (não funciona no escopo superior):
Mais informações:
Documentação Mozilla
Posso usar (95% mar 2020)
David Walsh Tutorial
fonte
function()
exemplos caso você não prefira=>
. Você deve absolutamente usar o JS moderno para facilitar a experiência do desenvolvedor. Preocupar-se com uma pequena percentagem de pessoas presas no IE não vale a pena a menos que você é uma empresa enormethis
palavra - chave. Gosto de mencionar isso, mas também odeio secretamente pessoas que usamthis
e arquitetura de herança em vez de fábricas funcionais. Perdoe-me, eu sou nó.this
como a praga também, e também alguém deve lerthis
.this
.Uso mínimo de
FormData
para enviar uma solicitação AJAXObservações
Isso não responde totalmente à pergunta do OP, pois exige que o usuário clique para enviar a solicitação. Mas isso pode ser útil para pessoas que buscam esse tipo de solução simples.
Este exemplo é muito simples e não suporta o
GET
método Se você se interessa por exemplos mais sofisticados, consulte a excelente documentação MDN . Consulte também respostas semelhantes sobre XMLHttpRequest para postar formulário HTML .Limitação desta solução: como apontado por Justin Blank e Thomas Munk (veja seus comentários),
FormData
não é suportado pelo IE9 e inferior e pelo navegador padrão no Android 2.3.fonte
FormData
é suportado por muitos navegadores, exceto o IE9 e o Android 2.3 (e o OperaMini, mas este último não é amplamente utilizado). Cheers ;-)onsubmit="return submitForm(this);"
caso contrário, o usuário será redirecionado para a URL na solicitação.false
. Setrue
for devolvido, a solicitação POST original (indesejada) será enviada! Sua resposta está correta, desculpe a confusão.Certifique-se de que sua API de back-end possa analisar JSON.
Por exemplo, no Express JS:
fonte
NENHUNS PLUGINS NECESSÁRIOS!
Selecione o código abaixo e arraste-o para a BARRA DE LIVRO ( se não o vir, ative-o em Configurações do navegador ) e, em seguida, EDITE esse link:
Isso é tudo! Agora você pode visitar qualquer site e clicar nesse botão na barra de favoritos !
NOTA:
O método acima envia dados usando o
XMLHttpRequest
método, portanto, você deve estar no mesmo domínio enquanto aciona o script. É por isso que prefiro enviar dados com uma FORM SUBMITTING simulada, que pode enviar o código para qualquer domínio - aqui está o código para isso:fonte
XmlHttpRequest
na sua resposta: |Eu enfrentei um problema semelhante, usando o mesmo post e neste link resolvi meu problema.
Este link completou as informações.
fonte
fonte
Tente usar o objeto json em vez de formdata. abaixo está o código funcionando para mim. O formdata também não funciona para mim; portanto, eu vim com essa solução.
fonte
Apenas para leitores de recursos que encontrarem essa pergunta. Descobri que a resposta aceita funciona bem desde que você tenha um determinado caminho, mas se você deixar em branco, ela falhará no IE. Aqui está o que eu vim com:
Você pode:
fonte
Há algumas duplicatas que tocam nisso, e ninguém realmente explica. Vou emprestar o exemplo de resposta aceito para ilustrar
Eu simplifiquei demais isso (uso em
http.onload(function() {})
vez da metodologia mais antiga dessa resposta) para fins de ilustração. Se você usar como está, verá que seu servidor provavelmente está interpretando o corpo do POST como uma string e não comokey=value
parâmetros reais (por exemplo, o PHP não mostrará nenhuma$_POST
variável). Você deve passar o cabeçalho do formulário para obtê-lo e fazer isso anteshttp.send()
Se você estiver usando JSON e os dados não URL-codificados, passar
application/json
em vezfonte
Isso me ajudou, pois eu queria usar apenas
xmlHttpRequest
e postar um objeto como dados do formulário:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
fonte