Вызов jQuery AJAX с использованием POST можно получить только с помощью $ _GET? - PullRequest
2 голосов
/ 01 февраля 2010

У меня есть следующий код, который работает:

<script type="text/javascript">
$(document).ready(function() {
    // Initialise the table
    $('#table_1').tableDnD({
    onDrop: function(table, row) {
    $.tableDnD.serialize();

    $.ajax({
     type: "POST",
     url: "test.php?"+$.tableDnD.serialize(),
     data: "",
     success: function(html){
       alert("Success");
     }
    });
    }
});
});
</script>

Отправка данных в test.php:

<?php
$table_1[] = $_GET['table_1'];
$i = 0;
if(!empty($table_1[0])){
    foreach($table_1 as $value) {
        foreach($value as $row){
            $i++;
            mysql_query("UPDATE mytable SET tableOrder='$i' WHERE id = '$row'");
        }
    }
}
?>

Как видите, массив table_1 извлекает данные, используя $ _GET, но этот код ajax говорит, что мы отправляем с POST. Если я изменю $ _GET на $ _POST, он больше не работает. Почему это?

Ответы [ 5 ]

5 голосов
/ 01 февраля 2010

Когда вы читаете из $_POST, вы должны передать значения в data вместо строки запроса URL.

Ваш код JavaScript должен измениться следующим образом:

$.ajax({
 type: "POST",
 url: "test.php",
 data: $.tableDnD.serialize(),
 success: function(html){
   alert("Success");
 }
});

Тогда вы сможете сделать:

<?php
$table_1[] = $_POST['table_1'];
?>

Ваш оригинальный код работал, потому что, как отметил Майк Шеров в комментарии ниже, любые данные, передаваемые в строке запроса URL, всегда могут быть доступны с помощью $_GET, независимо от того, какой глагол HTTP используется для отправки данных .

1 голос
/ 01 февраля 2010

Это потому, что вы поместили параметр в URL (что-то вроде GET).Чтобы использовать параметр POST, вы должны поместить его в область данных.Вот так.

<script type="text/javascript">
$(document).ready(function() {
    // Initialise the table
    $('#table_1').tableDnD({
    onDrop: function(table, row) {
    $.tableDnD.serialize();

    $.ajax({
     type: "POST",
<b>     url: "test.php"+,
     data: "" + $.tableDnD.serialize(),</b>
     success: function(html){
       alert("Success");
     }
    });
    }
});
});
</script>

Предполагая, что $.tableDnD.serialize() создает правильную строку запроса.

Надеюсь, это поможет.

0 голосов
/ 01 февраля 2010

Ваш скрипт не отправляет DATA через метод POST, и, если целевой файл содержит данные GET, PHP просто видит их как дату, переданную через URL.

Вам необходимо поместить данные в опцию данных. ;)

0 голосов
/ 01 февраля 2010
url: "test.php?"+$.tableDnD.serialize(),

Эта часть генерирует запрос на получение, вам нужно использовать его следующим образом:

$.ajax({
     type: "POST",
     url: "test.php",
     data: $.tableDnD.serialize(),
     success: function(html){
       alert("Success");
     }
    });
0 голосов
/ 01 февраля 2010

Я думаю, это потому, что вы создаете POST URL со строкой запроса и добавляете значения из tableDnD в ваш URL.

См. документацию и, в частности, раздел «Отправка данных на сервер».

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