JQuery.ajax method = "post", но $_POST пуст
$.ajax({
method: "post"
, url: "save.php"
, data: "id=453&action=test"
, beforeSend: function(){
}
, complete: function(){
}
, success: function(html){
$("#mydiv").append(html);
}
});
Я установил тип метода как пост, но в Save.php. Я просто получаю значения либо в $_GET
, либо $_REQUEST
, но не в $_POST
.
Моя форма выглядит так:
<form method="post" id="myform" action="save.php">
Он не работал, огляделся здесь и в Google, попробовал добавить enctype
<form method="post" id="myform" action="save.php" enctype="application/x-www-form-urlencoded">
но все еще $_POST
пусто?
Как мне заставить работать?
Ответы
Ответ 1
Вместо method: "post"
вам нужно использовать type: "POST"
Итак, это должно работать без каких-либо изменений в вашей форме HTML:
$.ajax({
type: "POST"
, url: "save.php"
, data: "id=453&action=test"
, beforeSend: function(){
}
, complete: function(){
}
, success: function(html){
$("#mydiv").append(html);
}
});
Не знаю, почему это не работает, но это работает для меня:
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>
Ваша ошибка должна лежать где-то в другом месте.
Ответ 2
У меня возникали проблемы с потерями переменных в миксе и обнаружил, что при использовании условий перезаписи для внешней перенаправления dir/foo.php
в dir/foo
Apache вообще отказывался от запроса POST и перенаправлял.
Поэтому при написании JavasSript вы должны ссылаться на файл таким образом, чтобы он мог обойти любое внешнее перенаправление.
например. Отбросьте имя расширения в строке с помощью JavaScript.
Запись
url: "dir/foo"
вместо
url: "dir/foo.php"
Я надеюсь, что это поможет другим, кто нашел эту страницу, как я.
Ответ 3
Почему бы не вызвать jQuery.post()
напрямую?
$.post("save.php",
$("#myform").serialize(),
function(html) {
$("#mydiv").append(html);
},
"html"
);
Что касается jQuery.ajax()
, переход на type: "POST"
вместо method: "POST"
приведет к правильному запросу POST
:
$.ajax({
type: "POST",
url: "test.mhtml",
data: $("#myform").serialize(),
success: function(html){
$('#mydiv').html(html);
}
});
Это отображается в журналах Apache как:
::1 - - - [30/Oct/2009:09:44:42 -0700] "POST /test.php HTTP/1.1" 200 9 "http://localhost:10501/test.mhtml" "(sic)"
Возможная альтернативная проблема:
Я нашел fooobar.com/questions/81069/..., осматривая вашу проблему. Может быть, это не jQuery, который дает вам неприятности, это PHP? В верхнем голосовавшем ответе есть несколько предложений по обеспечению того, что PHP не вмешивается, а второй самый высокий ответ предлагает некоторый код, чтобы увидеть, действительно ли запрос является POST
или нет:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo 'POSTed';
}
?>
Ответ 4
** Добавьте код кода в свой код до успеха **
beforeSend: function(xhr){xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")}
Ответ 5
У меня были похожие проблемы с $(form).ajaxSubmit()
.
Инструменты браузера указывали, что я успешно выдал POST
. На сервере $_SERVER['REQUEST_METHOD']
также указывал POST
, и все же переменная $_POST
в PHP возвращалась как array(0) { }
. Проблема для меня заключалась в том, что я на самом деле отправлял пустую форму. Как только в форме появились данные, в $_POST
появилось что-то (как и следовало ожидать!), Но что более важно, if ($_POST) {... }
начал возвращать true
.
Ответ 6
В моем случае решение добавляло недостающую .serialize()
в data
линии заявления Ajax:
data: $("#form").serialize()