2009-10-30 25 views
10
$.ajax({ 
    method: "post" 
    , url: "save.php" 
    , data: "id=453&action=test" 
    , beforeSend: function(){ 

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

He establecer el tipo de método como post pero en Save.php acabo de obtener valores ya sea en $_GET o $_REQUEST pero no en $_POST.

Mi forma se parece a:

<form method="post" id="myform" action="save.php"> 

No estaba funcionando, se veía por aquí y en Google, trató añadiendo enctype

<form method="post" id="myform" action="save.php" enctype="application/x-www-form-urlencoded"> 

pero aún $_POST vacío?

¿Cómo puedo hacer que funcione?

+1

acaba de tener un problema similar usando el plugin de jQuery ajaxForm. Lo resolví asegurándome de que cada elemento de entrada tuviera un atributo 'nombre'. El mío coincide con el selector de ID, pero puede que no sea necesario. – jbrain

Respuesta

8

En lugar de method: "post" es necesario utilizar type: "POST"

Así que esto debería funcionar sin ningún tipo de alteraciones en su formulario HTML:

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

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

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

save.php

<?php 
print_r($_POST); 

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

Su error debe estar en otro lugar.

+0

no .. no funciona. – TigerTiger

+0

@Wbdvlpr: abra la consola Firebug y verifique las solicitudes que se envían. Puedes ver qué método usa (get/post) y qué parámetros se envían a qué url. Entonces ve desde allí. – serg

+0

Pero obtengo valores en $ _GET y $ _REQUEST .. pero no en el $ _POST .. alguna idea de cómo verificar si "en otro lugar" está mal? – TigerTiger

4

¿Por qué no llamar al 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" provocará 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é this question on StackOverflow mientras analizo su problema. Tal vez no es el jQuery el que te está causando problemas, ¿es PHP? La respuesta más votos tiene algunas sugerencias para asegurar que PHP no está interfiriendo, y la respuesta segundo más alto ofrece algo de código para ver si la solicitud es en realidad un POST o no:

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    echo 'POSTed'; 
    } 
?> 
+0

¿Qué hay de mejor, completo, éxito ?? con .post ?? – TigerTiger

+0

simplemente use: $ .post ("save.php", $ ("# myform"). Serialize(), función (datos) {$ ('. Msg'). Html (datos);); (tercer algoritmo es una devolución de llamada a la función.) – CodeJoust

+0

He editado para incluir los argumentos tercero y cuarto. El tercer argumento es la función de devolución de llamada cuando la información vuelve, y el cuarto argumento es el tipo de datos que regresan. jQuery hará un análisis sintáctico para usted, si cambia al tipo de retorno JSON. –

3

yo estaba teniendo problemas con las variables también se perdió en la mezcla y descubrió que al usar Rewrite Conditions para redirigir externamente dir/foo.php a dir/foo, Apache soltaba la solicitud POST por completo y redirigía.

Por lo tanto, al escribir el JavasSript debe hacer referencia al archivo de una manera que pueda eludir cualquier redirección externa.

por ejemplo.Coloque el nombre de la extensión en línea con el JavaScript.

Escribir

url: "dir/foo"

en lugar de

url: "dir/foo.php"

espero que esto ayude a otros que se encuentran esta página como yo.

+0

¡Gracias! ¡Tu comentario me ayudó! :) – Zhenya

2

** Añadir a continuación pedazo de código en el código antes de éxito **

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

después de eso en mi $ _POST apareció mi información! –

Cuestiones relacionadas