Jquery .ajax method = "post", но $ _POST пусто - PullRequest
13 голосов
/ 30 октября 2009
$.ajax({
    method: "post"
    , url: "save.php"
    , data: "id=453&action=test" 
    , beforeSend: function(){

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

Я установил тип метода как post, но в Save.php я просто получаю значения либо в $_GET или $_REQUEST, но не в $_POST.

Моя форма выглядит так:

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

Не сработало, посмотрел тут и в гугле, попробовал добавить enctype

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

но все еще $_POST пусто?

Как мне заставить это работать?

Ответы [ 6 ]

10 голосов
/ 30 октября 2009

Вместо 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>

Ваша ошибка должна быть в другом месте.

5 голосов
/ 04 марта 2013

У меня также были проблемы с потерянными переменными в миксе, и я обнаружил, что при использовании условий перезаписи для внешнего перенаправления dir/foo.php в dir/foo Apache вообще отбрасывал запрос POST и перенаправлял.

Таким образом, при написании скрипта Javas вы должны ссылаться на файл таким образом, чтобы он мог обойти любое внешнее перенаправление.

например. Удалите имя расширения, встроенное в JavaScript.

запись

url: "dir/foo"

вместо

url: "dir/foo.php"

Я надеюсь, что это поможет другим, кто нашел эту страницу, как я.

4 голосов
/ 30 октября 2009

Почему бы не позвонить 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)"

Возможный альтернативный выпуск:
Я нашел этот вопрос в StackOverflow , глядя на вашу проблему. Может быть, дело не в jQuery, а в PHP? Ответ, получивший наибольшее количество голосов, предлагает несколько советов по обеспечению того, чтобы PHP не мешал, а второй по значению ответ предлагает некоторый код, чтобы увидеть, является ли запрос на самом деле POST или нет:

<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo 'POSTed';
  }
?>
3 голосов
/ 02 февраля 2017

** Добавьте ниже кусочек кода в свой код до успеха **

beforeSend: function(xhr){xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")}
0 голосов
/ 29 июня 2019

В моем случае решением было добавить отсутствующую .serialize() в строку data оператора Ajax:

data: $("#form").serialize()
0 голосов
/ 20 апреля 2018

У меня были похожие проблемы с $(form).ajaxSubmit().

Инструменты браузера указывали, что я успешно выдал POST. На сервере $_SERVER['REQUEST_METHOD'] также указывал POST, и все же переменная $_POST в PHP возвращалась как array(0) { }. Проблема для меня заключалась в том, что я на самом деле отправлял пустую форму. Как только в форме появились данные, в $_POST было что-то (как вы могли ожидать!), Но что более важно, if ($_POST) { ... } начал возвращать true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...