我试图通过AJAX请求实现发布到Codeigniter的新闻稿表单。 我正在使用CSRF保护。 我有以下代码,我似乎无法获得发布的值,因此没有正确回应。 几种不同的事情发生了:不接收Codeigniter AJAX表格中的发布数据
- 如果我在输入字段名=“电子邮件”时,CSRF失败,我得到500(内部服务器错误)
如果我离开它,然后我得到下面打印到控制台意味着它确实去控制器但不提取后值。 (undefined是在阿贾克斯()函数
不确定响应
对象{状态: “错误”,邮件: “请填写正确的邮箱地址”,邮件: “电子邮件:”}
如果我把名字=“电子邮件”,并做了Ajax的顶部的console.log(数据)(),然后我得到的值不同的对象,像这样
[对象],[对象]
对象名称:“csrf_test_name”值:“e31943d629f0a47d449f21997c220446 “
对象名称:‘邮件’值:‘[email protected]’
我想有秩序的形式和不同功能的AJAX请求只写一遍表单处理程序当我做出新的形式时。
任何人都可以指出我做错了什么?我相信在序列化时有些格式是我不明白的。目前我只登录到控制台,因为我迷失在错误的位置。
HTML
<form role="form" id="subscriber_form">
<input id="csrf" type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>"/>
<div class="alert hidden" id="returnmessage">
</div>
<div class="form-group form-group-default input-group">
<label>Email address</label>
<input type="email" id="email" name="email" class="form-control" placeholder="[email protected]" required />
</div>
<button id="subscribe_submit" class="btn btn-success btn-block" type="button">Subscribe!</button>
</form>
使用Javascript(JQuery的1.11.1)
function ajaxSubmit(form,url,data){
console.log(data);
$.ajax({
type: 'POST',
url: url,
dataType: 'JSON',
data: data,
success: function (response) {
console.log(response);
}
});
}
$('#subscribe_submit').click(function(e){
e.preventDefault();
var form = '#subscriber_form';
var url = 'subscribers/save_subscriber';
var data = $(form).serializeArray();
var response = ajaxSubmit(form, url, data);
console.log(response)
});
PHP(笨3.0)
function save_subscriber(){
$data = array(
'email' => $this->input->post('email'),
'created' => date('Y-m-d H:i:s')
);
$success_response = array(
'status' => 'success',
'message'=> 'You now subscribe to our newsletter'
);
$error_response = array(
'status' => 'error',
'message'=> 'Please fill in a correct email address',
'email' => " Email: ". $data['email']
);
$valid_email = validate_email($data['email']);
if ($data['email'] != "" && $valid_email == TRUE) {
$this->_insert($data);
$response = $success_response;
}
else{
$response = $error_response;
}
echo json_encode($response);
}
而且我试图用ajaxSetup和JQuery的cookie设置它,但没有成功,因为我无法将数据导入函数。我认为这是全球性的。
$.ajaxSetup({
data: {
"csrf_test_name": $.cookie('csrf_cookie_name')
}
});
编辑 我已经部分解决了这个。我打开日志记录
$config['log_threshold'] = 2;
并发现我从CI 2.0复制的模型中有错误。这解决了获取帖子值的问题。
拟订一项 我也意识到,我不能做什么,我与AJAX请求解释上面,因为那会要么使该请求没有异步或失速的浏览器,同时等待响应。
url定义在哪里?显示 –
URL是以表单处理程序var url ='subscribers/save_subscriber'定义的;如果我从表单中删除了'name ='email'',那么我会得到这个响应,而不会有任何服务器错误。 '对象{状态:“错误”,消息:“请填写正确的电子邮件地址”,电子邮件:“电子邮件:”}'它只是没有收到控制器中的发布值。 – nicolaib
without'base_url'你不能调用站点路径 –