序列化表单并向函数发布ajax
Serialzing form and posting ajax to function
我正试图将表单字段值传递给位于文件中的php函数。问题是,我不明白如何将序列化的表单数据从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'
)
);
}
函数.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)";
}
问题是serialize()
生成一个URL编码的键值配对字符串,因此不能将其与数据对象混合。
您可以使用serializeArray()
来获得表示表单元素的对象数组,然后对它们进行迭代并将它们添加到数据对象中:
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注入的攻击。考虑使用Prepared语句,而不是将用户输入连接到SQL中。
您可以像现在这样通过ajax将序列化数据传递给函数,但您的代码需要稍作修改。
$('#insert_news').submit(function(event) {
event.preventDefault();
var form = $('#insert_news').serialize();
$.ajax({
type: 'POST',
url: 'includes/ajax.php',
data: {
action: 'insert_news',
serializedData: form // use variable to assign data here
},
success: function(datas) {
$('#message').html(datas).show() /*fadeIn(1000).fadeOut(1000)*/ ;
}
});
});
我认为你可以使用像这样的
第一:在表单上添加隐藏的操作输入
<input type="hidden" name="action" value="insert_news"/>
然后你的ajax帖子像这个
$('#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)*/ ;
}
});
});
然后在ajax.php 上使用print_r
print_r($_POST);
$('#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)*/ ;
}
});
});
这对我来说很好:-)
相关文章:
- 另一个Ajax函数触发的Ajax函数不起作用
- 从Ajax函数返回值
- 在成功时操作 AJAX 函数
- 将变量放入ajax函数JQuery
- 将变量传递给ajax函数
- 调用replace()中的ajax函数
- 需要将select标记选项值传递给ajax函数
- 如何让 AJAX 函数处理提交表单
- AJAX函数在没有警报的情况下无法工作
- ajax函数未在C#中返回数据
- ajax函数更改下拉列表值
- 从 ajax 函数从数据库中检索数据值
- 轮询 ajax 函数超出调用堆栈
- 无法从服务器中的 php 调用 Ajax 函数
- 调用 Document.ready 外部的 AJAX 函数
- 如何从 jQuery 中的 ajax 函数中的类访问元素 ID
- 一个Ajax函数能产生另一个Ajax功能吗
- 当用户滚动到底部时,Ajax函数会多次触发
- 为什么不是't此AJAX函数正在更改颜色
- 无法调用ajax函数