使用POST的jQuery AJAX调用只能用$ _GET检索?

kyl*_*lex 2 javascript php ajax jquery

我有以下代码:

<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>
Run Code Online (Sandbox Code Playgroud)

将数据发送到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'");
        }
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,table_1数组使用$ _GET检索数据,但是ajax代码表示我们正在使用POST发送.如果我将$ _GET更改为$ _POST则不再有效.为什么是这样?

Dan*_*llo 5

读取时$_POST,应该传入值data而不是URL查询字符串.

您的JavaScript代码必须更改如下:

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

然后你就可以做到:

<?php
$table_1[] = $_POST['table_1'];
?>
Run Code Online (Sandbox Code Playgroud)

你的orignal代码正在运行,因为Mike Sherov在下面的评论中指出$_GET,无论用于提交数据的HTTP动词如何,都可以随时访问URL查询字符串中传递的任何数据.

  • 无论使用何种方法,在url中传递的任何数据始终被视为GET. (2认同)