我試圖通過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'你不能調用站點路徑 –