【发布时间】:2018-04-24 20:12:53
【问题描述】:
我是 ajax 新手,现在我想使用 ajax,这样我的页面在添加数据时不会重新加载并显示错误或成功消息。但在实现中,当我提交表单时,它会将我重定向到另一个页面,其中包含表单验证错误/成功消息。我试图解决这个问题,但我找不到错误。我正在使用 Jquery 1.8.3 和 codeigniter。这是我的代码。
自定义.js
function tambahBuku() {
$('#form_tambah')[0].reset();
$('#form_tambah').unbind('submit').bind('submit',function() {
var form = $(this);
$.ajax({
url: "http://localhost:8000/prjperpus-ci/Table/tambah",
type: "POST",
data : form.serialize(), //converting the form data into array and sending it to server
dataType : "json",
success:function(response, xhr, ajaxOptions, thrownError){
alert("OKAY"); alert(xhr.status);
if(response.success == true){
alert("OK");
$(".messages").html('<div class="alert alert-success alert-dismissible" role="alert">' +
'<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>' +
'<strong><span class="glyphicon glyphicon-ok-sign"> </span></strong>' + response.messages + '</div>')
} else{
if(response.messages instanceof Array){
$.each(response.messages, function(index,value) {
alert(index);
});
} else {
alert("OK else");
$(".messages").html('<div class="alert alert-warning alert-dismissible" role="alert">' +
'<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>' +
'<strong><span class="glyphicon glyphicon-exclamination-sign"> </span></strong>' + response.messages + '</div>')
}
}
}, error: function(xhr, ajaxOptions, thrownError){
alert("ERROR");
alert(xhr.readyState);
}
})
});
}
查看
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#tambah" onclick="tambahBuku()">Tambah Buku</button>
<div class="messages"></div>
<div class="modal fade" id="tambah" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="exampleModalLabel">Input Buku</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php $attributes = array('id' => 'form_tambah','method' => 'POST');
echo form_open('Table/tambah', $attributes); ?>
<div class="modal-body">
<div class="form-group">
<label>ISBN</label>
<input type="text" class="form-control" id="" placeholder="ISBN" name="isbn">
</div>
<div class="form-group">
<label>Judul Buku</label>
<input type="text" class="form-control" id="" placeholder="Judul Buku" name="judul">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary" onclick="">Save changes</button>
</div>
<?php echo form_close(); ?>
</div>
</div>
</div>
控制器(Table.php)
public function tambah()
{
$data = array(
'ISBN' => $this->input->post('isbn'),
'Judul_Buku' => $this->input->post('judul'),
);
$config = array(
array(
'field' => 'isbn',
'label' => 'ISBN',
'rules' => 'trim|required'
),
array(
'field' => 'judul',
'label' => 'Judul buku',
'rules' => 'trim|required|is_unique[buku.Judul_Buku]'
)
};
$this->form_validation->set_rules($config);
$validator = array('success' => false , 'messages' => array());
if($this->form_validation->run() === TRUE){
$insert_Book = $this->action->insert_record("buku",$data);
if($insert_Book == true){
$validator['success'] = true;
$validator['messages'] = "Data sukses ditambahkan";
var_dump($validator);
} else{
$validator['success'] = false;
$validator['messages'] = "Data gagal ditambahkan";
}
}else{
$validator['success'] = false;
foreach ($_POST as $key => $value) {
$validator['messages'][$key] = form_error($key);
}
}
echo json_encode($validator);
}
模型(action.php)
public function get_data($table){
return $this->db->get($table);
}
public function insert_record($table,$data){
$sql = $this->db->insert($table, $data);
if($sql === true){
return true;
} else{
return false;
}
}
【问题讨论】:
-
成功的正确语法是
success: function(data, status, xhr) {... xhr 是第三个参数 -
我改了还是一样
-
请具体说明,它是未定义的?您是否尝试过控制台记录 xhr 参数?
标签: php jquery ajax codeigniter