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';
}
?>