Saltar al contenido

Jquery .ajax method = “post” pero $ _POST vacío

Solución:

En lugar de method: "post" necesitas usar type: "POST"

Entonces esto debería funcionar sin ninguna alteración en el HTML de su formulario:

$.ajax({
    type: "POST"
    , url: "save.php"
    , data: "id=453&action=test" 
    , beforeSend: function(){

    } 
    , complete: function(){ 
    }  
    , success: function(html){ 
        $("#mydiv").append(html);        
    }
});

No estoy seguro de por qué no funciona, pero esto funciona para mí:

save.php

<?php
print_r($_POST);

file.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>Example</title>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $('input').click(function() {
                $.ajax({
                    type: "POST"
                    , url: "save.php"
                    , data: "id=453&action=test" 
                    , beforeSend: function(){

                    } 
                    , complete: function(){ 
                    }  
                    , success: function(html){ 
                        alert(html);        
                    }
                });
            });
        });
    </script>
</head>

<body>
    <div id="main"><input type="button" value="Click me"></div>
</body>
</html>

Tu error debe estar en otra parte.

** Agregue el siguiente fragmento de código en su código antes de tener éxito **

beforeSend: function(xhr){xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")}

Por qué no llamar jQuery.post() ¿directamente?

$.post("save.php",
  $("#myform").serialize(),
  function(html) { 
    $("#mydiv").append(html);        
  },
  "html"
);

En lo que respecta a jQuery.ajax(), cambiando a type: "POST" en lugar de method: "POST" causará una adecuada POST solicitud:

$.ajax({
        type: "POST",
        url: "test.mhtml",
        data: $("#myform").serialize(),
        success: function(html){ 
                $('#mydiv').html(html);
        }
});

Esto se muestra en los registros de Apache como:

::1 - - - [30/Oct/2009:09:44:42 -0700] "POST /test.php HTTP/1.1" 200 9 "http://localhost:10501/test.mhtml" "(sic)"

Posible problema alternativo:

Encontré esta pregunta en StackOverflow mientras miraba su problema. Tal vez no sea jQuery lo que te está dando problemas, ¿es PHP? La respuesta más votada tiene algunas sugerencias para garantizar que PHP no interfiera, y la segunda respuesta más alta ofrece algún código para ver si la solicitud es realmente una POST o no:

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo 'POSTed';
  }
?>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *