JQuery Ajax envía GET en lugar de POST

87

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 /'.

Timothée HENRY
fuente
2
¿Por qué crees que será una solicitud GET?
Viktor S.
1
¿Ha intentado ejecutar la llamada ajax en Firefox con el panel de red abierto en Firebug?
Fabrizio Calderan
2
Prueba : si ejecuta esto y verifica el panel de red, encontrará que envía una solicitud de publicación
Viktor S.
1
@tucson, como ya escribí, verifique su archivo .htaccess. Posiblemente haga redireccionar en lugar de reescribir. Básicamente, veo que JS está bien (espere ese punto en la url './api/add' que me confunde). Entonces parece más un problema del lado del servidor. Y la información en su pregunta no es suficiente para brindar ayuda específica
Viktor S.
1
Agregue la solución como la respuesta, por favor
Adam Lynch

Respuestas:

101

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.

  • Resulta que necesitas usar

tipo: "POST"

  • Aunque el ejemplo en la página jQuery dice usar

método: "POST"

Ahora es POST

Pero después de buscar en la documentación encontré esto.

ingrese la descripción de la imagen aquí

Piotr Kula
fuente
6
este es el problema que SOLO estaba teniendo. no se dio cuenta de que el nombre de la opción se cambió en 1.9. Pensé que siempre fue "método"
Bill Garrison
2
No veo ningún problema en incluir ambos solo para estar seguro. { method : "POST", type: "POST" }
Scott
Sí, puede incluir lo que quiera en el constructor, pero incluir ambos por compatibilidad no tiene mucho sentido. La mayoría de las personas ya usarán 1.11 o 2.1 de alguna manera. Esto solo causa un problema después de actualizar como desde 1.4.3 o 1.6.2
Piotr Kula
3
Pasé tanto tiempo tratando de solucionar esto el viernes actualizando una interfaz antigua para usar una API nueva. Muchas gracias!
NobleUplift
31

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!

texelate
fuente
Esto resolvió el problema exacto mencionado en la pregunta original para mí. Estoy alojando una aplicación de Laravel en Wamp 3.0.6
İlter Kağan Öcal
10

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 en GETlugar dePOST

Solución

  • usar la URL completa './api/add/index.php'
  • o agregue una barra './api/add/'.
Jossef Harush
fuente
6

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:

  1. Actualización del primer rol - POST - 200 éxito

  2. 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)

  3. Redirigir llamada desde (2) (Misma URL) - GET - 404 Not Found (ya que solo permití Publicar)

  4. 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).

emragins
fuente
¡Muchas gracias!
machineaddict
¡Woah! Se enfrentó a algo similar. Aparentemente, en mi nivel de controlador, esperaba un parámetro de sesión que no he incluido en el nuevo punto final del controlador, y estaba haciendo un 302 y luego un GET. Gracias amigo.
Nimila Hiranya
5

Descubrí que al usarlo dataType: 'jsonp'convierte la solicitud en un GET. Lo cambié a dataType: 'json'cambió de GETa POST.

tonejac
fuente
¿Cuál es la razón por la que se observó este comportamiento?
Saurabh Sarathe
@SaurabhSarathe: JSONP funciona generando elementos de script que solo pueden generar solicitudes GET.
Quentin
3

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"
});
Parham
fuente
Esto suena más como un problema entre HTTP y HTTPS (es decir, su www.someurl.com no tiene un certificado válido)
Alexis Wilke
2

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/

Mr_DeLeTeD
fuente
8
postes solo un método abreviado para $ .ajax ({tipo: 'POST'})
Viktor S.
Sí, pero como tu código se ve bien. cuando lo estoy probando, hace una solicitud de publicación
Mr_DeLeTeD
1

Consulte su archivo .htaccess o busque alguna otra cosa que pueda redirigir su solicitud

Viktor S.
fuente
1

Tuve el mismo problema y encontré esta pregunta, pero las respuestas no resolvieron mi problema. Finalmente lo resuelvo eliminando el contentTypecampo en la solicitud ajax.

contentType: "application/json",
Farid Movsumov
fuente
1

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ó.

Callan
fuente
0

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

Junaid Masood
fuente