我正在尝试将数据从表单发送到数据库。以下是我使用的表格:
<;formname=“foo”action=“form.php”method=“POST”id=“foo”>;
<;标签for=“bar”>;酒吧</标签>;
<;输入id=“bar”name=“bar”type=“text”value=”“/>;
<;输入type=“submit”value=“Send”/>;
</表格>;
典型的方法是提交表单,但这会导致浏览器重定向。使用jQuery和Ajax,是否可以捕获表单的所有数据并将其提交到PHP脚本(例如,form.PHP)
.ajax的基本用法如下:
HTML:
<;表单id=“foo”>;
<;标签for=“bar”>;酒吧</标签>;
<;输入id=“bar”name=“bar”type=“text”value=”“/>;
<;输入type=“submit”value=“Send”/>;
</表格>;
jQuery:
//保存请求的变量
var请求;
//绑定到表单的提交事件
$(“#foo”).submit(函数(事件){
//防止表单的默认过帐-在出现错误时放在此处以起作用
event.preventDefault();
//中止任何挂起的请求
如果(请求){
request.abort();
}
//设置一些局部变量
var$form=$(此);
//让我们选择并缓存所有字段
var$inputs=$form.find(“输入、选择、按钮、文本区域”);
//序列化表单中的数据
var serializedData=$form.serialize();
//让我们在Ajax请求期间禁用输入。
//注意:我们在表单数据序列化后禁用元素。
//禁用的表单元素将不会序列化。
$inputs.prop(“禁用”,真);
//向/form.php发出请求
请求=$.ajax({
url:“/form.php”,
类型:“post”,
数据:序列化数据
});
//成功时将调用的回调处理程序
完成(函数(响应、文本状态、jqXHR){
//将消息记录到控制台
log(“万岁,成功了!”);
});
//失败时将调用的回调处理程序
失败(函数(jqXHR、textStatus、errorshown){
//将错误记录到控制台
控制台错误(
“发生了以下错误:”+
文本状态,错误抛出
);
});
//将被调用的回调处理程序
//如果请求失败或成功
request.always(函数(){
//重新启用输入
$inputs.prop(“禁用”,false);
});
});
注意:自从jQuery 1.8以来,.success()、.error()和.complete()被弃用,取而代之的是.done()、.fail()和。总是()
注意:请记住,上面的代码片段必须在DOM就绪后完成,因此您应该将其放入$(document).ready()处理程序中(或使用$()速记)。
提示:您可以像这样链接回调处理程序:$.ajax().done().fail().always()
PHP(即form.PHP):
//您可以访问jQuery.ajax发布的值
//通过全局变量$\u POST,如下所示:
$bar=isset($\u POST['bar'])$_POST['bar']:空;
注意:始终清理发布的数据,以防止注入和其他恶意代码。
您还可以在上述JavaScript代码中使用速记.post代替.ajax:
$.post('/form.php',序列化数据,函数(响应){
//将响应记录到控制台
console.log(“响应:+响应”);
});
注意:上面的JavaScript代码适用于jQuery 1.8及更高版本,但它应该适用于jQuery 1.5之前的版本。