从表单通过Ajax发送数据

时间:2016-08-25 21:12:59

标签: php jquery ajax ajaxform

我需要使用Ajax通过id更新数据库中的行。

我的表格:

<form id="update_ajax">
     <input type="text" name="name" class="test_hide">
     <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
     <input type="submit" value="<?php echo $row['id']; ?>" class="pure-button">
</form>

我的Ajax功能:

$("#update_ajax").on("submit", function () {
        var id = $(this).attr('id');
        var name = $(this).attr('name');
        var dataall={'id' : id, 'name' : name};
        $.ajax({
            type: "post",
            url: "update.php",
            data: dataall,
            success: function (data) {
                alert(data);
            }
        });
    });

我的php文件是:

if ((isset($_GET['id'])) && (isset($_GET['name']))) {
    $id = $_GET['id'];
    $name = $_GET['name'];
}else{
    die("Not set");
}
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "8169x5it");
$query = $pdo->prepare("UPDATE test SET name=:name WHERE id=:id");
$query->bindParam(':name', $name);
$query->bindParam(':id', $id);
$query->execute();

我的错误是我的name值未在$_GET['name']中设置。我无法理解为什么没有设置它。因为我在数据中发送它。

2 个答案:

答案 0 :(得分:2)

这是错误的:

var id = $(this).attr('id');
var name = $(this).attr('name');

$(this)是表单,因此$(this).attr('id')"update_ajax",而不是隐藏输入的值。 $(this).attr('name')未定义,因为该表单没有name=something属性。你真正想要的是:

var id = $(this).find("input[name=id]").val();
var name = $(this).find("input[name=name]").val();

但你可以简化为:

var dataall = $(this).serialize();

serialize()将找到表单中的所有输入,并返回包含其所有值的URL编码字符串。

最后,您必须更改jQuery以使用type: 'GET',或者将PHP更改为使用$_POST而不是$_GET

答案 1 :(得分:0)

你有什么,http://api.jquery.com/attr/

您想要的是什么http://api.jquery.com/val/

给它一个镜头,它应该工作看起来不像源中的任何其他错误。如果不告诉我们。

编辑:

你也改变了:

$(this).attr('id');
$(this).attr('name');

$("input[name=id]").val();
$("input[name=name]").val();

或者

$(this).serialize();

有关后面的内容,请参阅https://api.jquery.com/serialize/