序列化窗体并发布阿贾克斯功能
我想通过窗体字段值到位于文件中的php函数。问题是我无法理解如何将这个序列化的表单数据从这个ajax传递给函数中的函数。序列化窗体并发布阿贾克斯功能
$('#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)";
}
的问题是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 Statement而不是将用户输入连接到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)*/ ;
}
});
});
试图与变量加入serializeddata,但我得到在PHP'注意事项:未定义指数:title',像不知何故没有经过他们的名字。 – user3467855 2014-10-03 09:55:20
您必须通过打印精确数组格式的post变量进行调试。你只是因为你的数组键会有所不同而遇到这个问题。 – 2014-10-03 10:00:57
了解。谢谢,这也是一个非常简单的解决方案。 – user3467855 2014-10-03 10:04:50
$('#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)*/ ;
}
});
});
这工作得很好,我:-)
我想你可以使用备用这样
第一:添加隐藏的输入动作的形式
<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)*/ ;
}
});
});
然后使用的print_r您ajax.php
print_r($_POST);
这是行得通的。 – user3467855 2014-10-03 09:58:31