O código a seguir aciona uma solicitação GET em vez de uma solicitação POST HTTP.
function AddToDatabase() {
this.url = './api/add';
}
AddToDatabase.prototype.postData = function(dataToPost) {
$.ajax({
type: "POST",
url: this.url,
data: dataToPost,
context: this,
success: this.onSuccess
});
};
var AddToDatabase = new AddToDatabase();
data = {data: 'coucou'};
AddToDatabase.postData(data);
Por que e como posso obter um POST?
Vejo no Google Chrome Inspect e no Firefox Inspect que o navegador envia um GET. Aqui está do Chrome:
URL de solicitação: http: // localhost / CÓDIGOS DE AMOSTRA / UPDATE% 20MYSQL / api / add / Método de solicitação: Código de status GET: 200 OK
RESOLVIDO
A URL chamada './api/add' era para realmente postar em './api/add/index.php'. Acontece que chamar './api/add /index.php
' ou './api/add /
' me dá uma solicitação POST.
Era apenas um URL errado, mas por algum motivo eu estava recebendo uma solicitação GET bem-sucedida para '.api / add /'.
Respostas:
Algum problema no MVC. Por algum motivo, quando removo o [HttPost], ele funciona conforme o esperado, embora eu esteja dizendo ao ajax para usar o POST.
Agora é POST's
Mas depois de cavar na documentação, encontrei isso.
fonte
{ method : "POST", type: "POST" }
Eu tive esse problema e, de acordo com a sugestão de @Fangle, foi porque meu .htaccess estava removendo barras à direita - e eu havia definido o url como
/ajax/foo/bar/
e não/ajax/foo/bar
. O redirecionamento altera a solicitação de POST para GET. Remova o / e problema resolvido!fonte
O URL
'./api/add'
realmente foi redirecionado para'./api/add/index.php'
. portanto, esse efeito colateral bizarro que a nova solicitação após o redirecionamento enviou usando emGET
vez dePOST
Solução
'./api/add/index.php'
'./api/add/'
.fonte
Notei esse comportamento também onde meu POST estava enviando um GET. O cenário é bastante único, mas talvez ajude alguém.
Isso estava acontecendo comigo na minha página de edição de função do usuário, onde eu estava usando ajax (post) como uma ação imediata quando uma função era marcada ou desmarcada.
Também configurei o servidor para reautenticar o usuário (e redirecioná-lo) sempre que suas informações de função fossem alteradas, para que suas declarações fossem atualizadas.
O ciclo brutal terminou como:
Atualização da primeira função - POST - sucesso 200
Próxima atualização de função - POST - 302 encontrado -> Redirecionar (não percebi isso até usar o Fiddler em vez do monitor de rede do Chrome)
Redirecionar chamada de (2) (mesmo URL) - GET - 404 não encontrado (já que eu só permiti postagem)
GOTO (1)
Acabei alterando o servidor para ignorar a atualização de reautenticação / declarações quando detectou uma solicitação ajax (com base nos tipos de aceitação).
fonte
Descobri que ao usá-
dataType: 'jsonp'
lo converte a solicitação em umGET
. Eu mudei paradataType: 'json'
mudou deGET
paraPOST
.fonte
Tive um problema semelhante e começou a funcionar para mim assim que removi o código rígido
https://
do meu url.jQuery.ajax({ type: "POST", url: "www.someurl.com",//instead of "https://www.someurl.com" data: { foo:"bar"}, success: function(d){ console.log(d); }, dataType: "JSONP" });
fonte
Para mim, seu trecho de código parece bom, mas se você quiser ter certeza, pode usar $ .post em vez de $ .ajax
$.post('ajax/test.html', function(data) { $('.result').html(data); });
link jquery: http://api.jquery.com/jQuery.post/
fonte
post
é apenas um método abreviado para $ .ajax ({type: 'POST'})Verifique seu arquivo .htaccess ou pesquise por alguma outra coisa que pode redirecionar sua solicitação
fonte
Tive o mesmo problema e encontrei esta questão, mas as respostas não resolveram o meu problema. Acabei resolvendo isso removendo o
contentType
campo na solicitação ajax.contentType: "application/json",
fonte
Eu tive esse problema e acabou sendo um módulo de regravação de URL no IIS.
Estou usando ASP.NET MVC e WebAPI. Eu criei uma regra para forçar URLs em minúsculas para que as redes sociais não vejam o mesmo URL como duas páginas diferentes.
Por exemplo:
" http://url.com/View/Something/123GuidIdSomething "
vs
" http://url.com/view/something/123guididsomething "
Isso, entretanto, estava de alguma forma bagunçando minhas solicitações de ajax. Desativei a regra e o problema foi resolvido.
fonte
um erro muito comum é usar o tipo de botão como enviar e não alterar o método do formulário (que é obtido por padrão)
certifique-se de não usar o tipo de botão enviar e, se o fizer, alterou o método do formulário para postar
fonte