通过 Ajax 从表单发送数据
Sending data via Ajax from form
我需要使用 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']
中设置。而且我不明白为什么它没有设置。因为我是用数据发的。
你有什么,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();
这是错误的:
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()
将找到表单中的所有输入,return 一个包含所有值的 URL 编码字符串。
最后,您必须将 jQuery 更改为使用 type: 'GET'
,或者将 PHP 更改为使用 $_POST
而不是 $_GET
。
我需要使用 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']
中设置。而且我不明白为什么它没有设置。因为我是用数据发的。
你有什么,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();
这是错误的:
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()
将找到表单中的所有输入,return 一个包含所有值的 URL 编码字符串。
最后,您必须将 jQuery 更改为使用 type: 'GET'
,或者将 PHP 更改为使用 $_POST
而不是 $_GET
。