El siguiente código desencadena una solicitud GET en lugar de una 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 qué y cómo puedo obtener un POST?
Veo en Google Chrome Inspect y Firefox Inspect que el navegador envía un GET. Aquí es de Chrome:
URL de solicitud: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / Método de solicitud: GET Código de estado: 200 OK
RESUELTO
La URL llamada './api/add' era para publicar en './api/add/index.php'. Resulta que llamar "./api/add /index.php
" o "./api/add /
" me da una solicitud POST.
Era solo una URL incorrecta, pero por alguna razón recibí una solicitud GET exitosa para '.api / add /'.
Respuestas:
Algún problema en MVC. Por alguna razón, cuando elimino el [HttPost], funciona como se esperaba, aunque le estoy diciendo a ajax que use POST.
Ahora es POST
Pero después de buscar en la documentación encontré esto.
fuente
{ method : "POST", type: "POST" }
Tuve este problema y, según la sugerencia de @ FAngle, fue porque mi .htaccess estaba eliminando las barras diagonales finales, y había configurado la URL en
/ajax/foo/bar/
y no/ajax/foo/bar
. La redirección cambia la solicitud de POST a GET. ¡Elimine el / y el problema resuelto!fuente
La URL en
'./api/add'
realidad fue redirigida a'./api/add/index.php'
. por lo tanto, este extraño efecto secundario que la nueva solicitud después de la redirección envió usando enGET
lugar dePOST
Solución
'./api/add/index.php'
'./api/add/'
.fuente
También noté este comportamiento donde mi POST estaba enviando un GET. El escenario es bastante único, pero quizás ayude a alguien.
Esto me estaba sucediendo en mi página de edición de roles de usuario, donde estaba usando ajax (publicación) como una acción inmediata cuando un rol estaba marcado o desmarcado.
También configuré el servidor para volver a autenticar al usuario (y redirigirlo) cada vez que cambiaba la información de su función para que sus reclamos se actualizaran.
El ciclo brutal terminó como:
Actualización del primer rol - POST - 200 éxito
Siguiente actualización de función - POST - 302 encontrado -> Redirigir (no me di cuenta de esto hasta que usé Fiddler en lugar del monitor de red de Chrome)
Redirigir llamada desde (2) (Misma URL) - GET - 404 Not Found (ya que solo permití Publicar)
GOTO (1)
Terminé cambiando el servidor para evitar la reautenticación / actualización de reclamaciones cuando detectó una solicitud ajax (según los tipos de aceptación).
fuente
Descubrí que al usarlo
dataType: 'jsonp'
convierte la solicitud en unGET
. Lo cambié adataType: 'json'
cambió deGET
aPOST
.fuente
Tuve un problema similar y comenzó a funcionar para mí tan pronto como eliminé el código
https://
de mi 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" });
fuente
Para mí, su parte del código se ve bien, pero si quiere estar seguro, puede usar $ .post en lugar de $ .ajax
$.post('ajax/test.html', function(data) { $('.result').html(data); });
enlace jquery: http://api.jquery.com/jQuery.post/
fuente
post
es solo un método abreviado para $ .ajax ({tipo: 'POST'})Consulte su archivo .htaccess o busque alguna otra cosa que pueda redirigir su solicitud
fuente
Tuve el mismo problema y encontré esta pregunta, pero las respuestas no resolvieron mi problema. Finalmente lo resuelvo eliminando el
contentType
campo en la solicitud ajax.contentType: "application/json",
fuente
Tuve este problema y resultó ser un módulo de reescritura de URL en IIS.
Estoy usando ASP.NET MVC y WebAPI. Creé una regla para forzar las URL en minúsculas para que las redes sociales no vean la misma URL como dos páginas diferentes.
Por ejemplo:
" http://url.com/View/Something/123GuidIdSomething "
vs
" http://url.com/view/something/123guididsomething "
Sin embargo, esto de alguna manera estaba jugando con mis solicitudes de ajax. Inhabilité la regla y el problema se resolvió.
fuente
un error muy común es que estamos usando el tipo de botón como enviar y no cambiamos el método para el formulario (que es get por defecto)
asegúrese de no usar el tipo de botón enviar y, si lo hace, ha cambiado el método del formulario para publicar
fuente