我有一个启用和禁用按钮。单击时,每个按钮在控制台中返回“成功”消息。启用按钮只需单击即可完成,但是,在我的开发人员工具中在控制台中打印“成功”消息之前,需要单击禁用按钮两次。这有什么问题?有人可以帮我解决这个问题吗?非常感谢。这是我的代码:
<button class="btn_mode" value="1">Enable</button>
<button class="btn_mode" value="0">Disable</button>
<script type="text/javascript">
$(".btn_mode").click(function(){
var mode_val = $(this).val();
var postdata={'mode':mode_val};
$.ajax({
type:"POST",
url:"<?php echo base_url();?>superadmin/change_mode",
dataType:'json',
data:postdata,
success: function(data){
if(data.notify=="Success")
{
console.log(data.notify);
location.reload();
}
else{
console.log(data.notify);
}
}
});
});
</script>
我的控制器功能
function change_mode(){
$mode = $this->input->post('mode');
$query = $this->course_booking_model->change_mode($mode);
if($query){
$notification = "Success";
}
else{
$notification = "Failed";
}
echo json_encode(array('notify'=>$notification));
}
模型
function change_mode($mode){
$id = 1;
$data = array('mode' => $mode);
$this->db->where('id',$id);
$this->db->update('maintenance_mode',$data);
return true;
}
在javascript中添加console.log('Posting mode_val: ' + mode_val);
时的输出
单击控制台中的启用按钮输出
单击禁用按钮时在控制台中输出
答案 0 :(得分:1)
由于您的事件连接看起来很好,我怀疑服务器端出现了问题,这意味着您的成功处理程序没有触发。在ajax调用之前尝试记录,以查看click事件是否会触发:
$(".btn_mode").click(function(){
var mode_val = $(this).val();
var postdata={'mode':mode_val};
console.log('Posting mode_val: ' + mode_val);
$.ajax({
type:"POST",
url:"<?php echo base_url();?>superadmin/change_mode",
dataType:'json',
data:postdata,
success: function(data){
if(data.notify=="Success")
{
console.log(data.notify);
location.reload();
}
else{
console.log(data.notify);
}
}
});
});
如果上面的内容在您单击按钮时记录了预期值,则表示您的PHP脚本在第一次使用mode_val = 0
调用时失败。
您可以尝试捕获可能抛出的任何异常:
function change_mode(){
try{
$mode = $this->input->post('mode');
$query = $this->course_booking_model->change_mode($mode);
if($query){
$notification = "Success";
}
else{
$notification = "Failed";
}
}
catch(Exception $e){
$notification = $e->getMessage();
}
echo json_encode(array('notify'=>$notification));
}
编辑: 您上传的图像表明服务器端代码存在问题,您的按钮点击正常。如果你更新你的PHP以捕获错误并返回它,你应该能够得到一个关于出错的提示。要查看完成的呼叫,您可以实现“完整”和/或“错误”回调:
$.ajax({
type:"POST",
url:"<?php echo base_url();?>superadmin/change_mode",
dataType:'json',
data:postdata,
success: function(data){
if(data.notify=="Success")
{
console.log(data.notify);
location.reload();
}
else{
console.log(data.notify);
}
},
error: function(jqXhr, txtStatus, errThrown){
console.log('Call failed with status:' + txtStatus);
if(errThrown)
console.log('and error:' + errThrown);
},
complete: function(jqXhr, txtStatus){
console.log('Call completed with status:' + txtStatus);
}
});
});
答案 1 :(得分:0)
嗯,也许是这样的
$(".btn_mode[value='1']").on("click", function(){ do something });
$(".btn_mode[value='0']").on("dblclick", function(){ do something });
答案 2 :(得分:0)
尝试更改模型以返回更新的真实结果。 像:
return $this->db->update('maintenance_mode',$data);
取决于更新后db包装器返回的内容。