Javascript 序列化表单并将ajax发布到函数
我试图将表单字段值传递给位于文件中的php函数。问题是,我无法理解如何将序列化的表单数据从ajax传递到php中的函数Javascript 序列化表单并将ajax发布到函数,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我试图将表单字段值传递给位于文件中的php函数。问题是,我无法理解如何将序列化的表单数据从ajax传递到php中的函数 $('#insert_news').submit(function(event) { event.preventDefault(); var form = $('#insert_news').serialize(); $.ajax({ type: 'POST', url: 'includes/ajax.php',
$('#insert_news').submit(function(event) {
event.preventDefault();
var form = $('#insert_news').serialize();
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: {
action: 'insert_news',
$('#insert_news').serialize(); // how do I add this data here?
},
success: function(datas) {
$('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
});
这个ajax将值传递到文件ajax.php。从ajax.php调用位于functions.php中的函数
ajax.php
if (isset($_POST['action']) && $_POST['action'] == 'insert_news') {
$cp->insert_into_table('newss', array(
'NewsTitle' => $_POST['title'],
'NewsDescrption' => $_POST['description'],
'Date' => date('Y-m-d H:i:s'),
'status' => '1'
)
);
}
function.php
public function insert_into_table($table_name, array $data){
foreach($data as $col=>$value) {
$cols[] = $col;
$values[] = '\''.$value.'\'';
}
$cols = implode(', ', $cols);
$values = implode(', ', $values);
$this->db->query("INSERT INTO $table_name ($cols) VALUES ($values)");
echo "INSERT INTO $table_name ($cols) VALUES ($values)";
}
您可以按目前的方式通过ajax将序列化数据传递给函数,但代码需要稍加修改
$('#insert_news').submit(function(event) {
event.preventDefault();
var form = $('#insert_news').serialize();
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: {
action: 'insert_news',
您可以按目前的方式通过ajax将序列化数据传递给函数,但代码需要稍加修改
$('#insert_news').submit(function(event) {
event.preventDefault();
var form = $('#insert_news').serialize();
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: {
action: 'insert_news',
问题是
serialize()
生成一个URL编码的键值对字符串,因此不能将其与数据对象混合
您可以使用获取表示表单元素的对象数组,然后对其进行迭代并将其添加到数据对象:
var data = { action: 'insert_news' };
$.each($('#insert_news').serializeArray(), function(){
data[this.name] = this.value;
});
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: data,
success: function(datas) {
$('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
旁注:PHP代码易受SQL注入攻击。考虑使用准备好的语句,而不是将用户输入连接到SQL.< P>问题是“代码> SerialZeIE())/代码>生成URL编码的键值配对字符串,因此不能将其与数据对象混合。
$('#insert_news').submit(function(event) {
var name = $("#t1").val();
var pass = $("#t2").val(); //add more var as u need
var key = 0;
var formName = new FormData();
formName.append(key++,name)
formName.append(key++,pass) //append the the var to formdata
$.ajax({
url : 'includes/ajax.php',
dataType : 'text',
cache : false,
contentType : false,
processData : false,
data : formName,
type : 'post',
success : function(data){
$('#message').html(data).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
});
您可以使用获取表示表单元素的对象数组,然后对其进行迭代并将其添加到数据对象:
var data = { action: 'insert_news' };
$.each($('#insert_news').serializeArray(), function(){
data[this.name] = this.value;
});
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: data,
success: function(datas) {
$('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
旁注:PHP代码易受SQL注入攻击。考虑使用准备好的语句,而不是将用户输入连接到SQL.
$('#insert_news').submit(function(event) {
var name = $("#t1").val();
var pass = $("#t2").val(); //add more var as u need
var key = 0;
var formName = new FormData();
formName.append(key++,name)
formName.append(key++,pass) //append the the var to formdata
$.ajax({
url : 'includes/ajax.php',
dataType : 'text',
cache : false,
contentType : false,
processData : false,
data : formName,
type : 'post',
success : function(data){
$('#message').html(data).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
});
这对我来说很好:-)
这对我来说很好:-)我想你可以用这样的替代品
$('#insert_news').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: $(this).serialize(), // $(this) is from <form id="insert_news">
success: function(datas) {
$('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
});
第一:为表单上的操作添加隐藏输入
<input type="hidden" name="action" value="insert_news"/>
我想你可以用这样的替代品
$('#insert_news').submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: $(this).serialize(), // $(this) is from <form id="insert_news">
success: function(datas) {
$('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
});
第一:为表单上的操作添加隐藏输入
<input type="hidden" name="action" value="insert_news"/>
尝试添加带有变量的serializeddata,但是我在php中遇到了
注意:未定义的索引:title
,好像没有传递它们的名称。您必须通过打印精确数组格式的post变量进行调试。您之所以会遇到这个问题,是因为您的数组密钥不同。请理解。谢谢,这也是一个非常简单的解决方案。尝试使用变量添加serializeddata,但我在php中遇到了注意:未定义的索引:title
,好像没有传递它们的名称。您必须通过打印精确数组格式的post变量进行调试。您之所以会遇到这个问题,是因为您的数组密钥不同。请理解。谢谢,这也是一个非常简单的解决方案。