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

时间:2010-01-31 22:40:09

标签: php javascript jquery ajax

我有以下代码可以使用:

<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 个答案:

答案 0 :(得分:5)

当您从$_POST阅读时,您应该传递data中的值而不是URL查询字符串中的值。

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

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

然后你就能做到:

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

您的orignal代码正常工作,因为在下面的评论中注明Mike Sherov,无论用于提交数据的HTTP动词如何,都可以使用$_GET访问URL查询字符串中传递的任何数据。

答案 1 :(得分:1)

那是因为你把参数放在了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",
     url: "test.php"+,
     data: "" + $.tableDnD.serialize(),
     success: function(html){
       alert("Success");
     }
    });
    }
});
});
</script>

假设$.tableDnD.serialize()生成有效的查询字符串。

希望这有帮助。

答案 2 :(得分:0)

我认为这是因为您使用查询字符串构建POST URL并将tableDnD中的值添加到您的URL中。

请参阅the documentation,特别是“向服务器发送数据”部分。

答案 3 :(得分:0)

url: "test.php?"+$.tableDnD.serialize(),

此部分生成一个get请求,您需要像这样使用它:

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

答案 4 :(得分:0)

您的脚本不会通过POST方法发送任何数据,而广告目标文件是GET数据,PHP只会将其视为通过网址传递的日期。

您需要将数据放入数据选项中。 ;)