提交数据后的jQuery没有显示成功视图,而是数据输入到数据库

时间:2016-06-17 07:31:40

标签: javascript php jquery ajax codeigniter

我在jQuery中遇到了一些问题。 我已使用以下代码提交了一份提交表单:

<form class="form-inline" id="newslatter" role="form" >
    <select name="city" id='city' class="form-control">
        <option value="<?=$id?>">Singapore</option>
    </select>

    <input type="email" class="form-control" name="email" id="email" placeholder="<?=$this->lang->line('footer_enter_email')?>" value="<?=(isset($json)?$json["email"]:"")?>">
    <label id="emptyemail" style="color:indianred"><?php echo form_error('email'); ?></label>
    <button type="submit" class="btn btn-success input"><?=$this->lang->line('footer_signup_now')?></button>
</form>
<div id="register_complete" style="display: none;color:whitesmoke;">
        <p align="center">Congratulations, You have been added to our Newsletter
        Thank you for your registration. From now on you will receive updates about exclusive offers in your city.</p>
</div>

这是我的jQuery:

<script type="text/javascript">
function validateEmail(email) {
    var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return regex.test(email);
}
$("#newslatter").submit(function(e){
    e.preventDefault();
    var email= $("#email").val();
    var city=$("#city").val();
    var something_wrong="";
    var agreement = $('#agreement input[type="checkbox"]').is(":checked");

    if(email.length == 0){
        $("#emptyemail").html("Please fill in Email field");
        $("#email").focus();
        something_wrong=true;
    }else if(!validateEmail(email)){
        $("#emptyemail").html("insert valid email address!");
        something_wrong=true;
    }else{ $("#emptyemail").html(""); something_wrong=false; }

    if(agreement == false ){
        $("#notagree").html("You should read and accept Terms and conditions and Privacy Policy");
        something_wrong=true;
    }else{ $("#notagree").html("");  something_wrong=false;}
    if( something_wrong == true) return false;

    jQuery.ajax({
        type: "POST",
        url: "ajax/newslatter",
        dataType: 'json',
        data: {pcity:city,pemail:email},
        success: function(res) {
            if (res)
            {
               if(res.message != "success"){
                   $("#emptyemail").html(res.message);
                   return false;
               }else{
                   $("#newslatter").hide();
                   $("#register_complete").show();
               }
            }
        }
    });
    return false;
});

这是我的ajax控制器:

Function newslatter(){
    $city_id=$this->input->post('pcity',true);
    $email = $this->input->post("pemail",true);
    $query= $this->ajax_m->m_check_email($email);

    if(strlen($email)==0){
        $data["message"]= "Please fill in Email field";
    }else{
        if($query != null){
            $data["message"]= "E-mail already registered";
        }else{
            $this->ajax_m->m_insert_newslatter($city_id,$email);
            $data["message"]= "success";
        }
    }

}

以下是ajax的以下模型:

Function m_check_email($email){
    $sql="SELECT `email` FROM `uhd_newslatter` WHERE `email` = '$email'";
    $query=$this->db->query($sql)->row_array();
    return $query;
}

Function m_insert_newslatter($city,$email){
    $sql="INSERT INTO `uhd_newslatter` (`singapore_address_id` , `email`) VALUES ($city,'$email')";
    $this->db->query($sql);
}

这些都是我的代码。我的问题是:

如果我提交数据,数据会发送到我的数据库,但之后在我的视图中没有发生任何事情,实际上如果提交过程成功,将显示我的成功消息,并且我的所有提交表单都将隐藏

并且,如果我使用相同的电子邮件,如果我提交它,它应该显示一条消息,我把它作为ajax控制器。但数据不会输入数据库。

你能帮我解决我的代码错误吗?

抱歉,如果我有很多代码(:

2 个答案:

答案 0 :(得分:0)

请使用以下代码更新您的简报功能:

function newslatter(){
    $data =array();
    $city_id=$this->input->post('pcity',true);
    $email = $this->input->post("pemail",true);
    $query= $this->ajax_m->m_check_email($email);

    if(strlen($email)==0){
        $data["message"]= "Please fill in Email field";
    }else{
        if($query != null){
            $data["message"]= "E-mail already registered";
        }else{
            $this->ajax_m->m_insert_newslatter($city_id,$email);
            $data["message"]= "success";
        }
    }
    return json_encode($data);
}

答案 1 :(得分:0)

在你的ajax写入dataType:&#39; json&#39;,但在你的控制器中有json_encode($ yourdata);这将成功读取ajax。因此,你的成功不会被执行。

jQuery.ajax({
        type: "POST",
        url: "ajax/newslatter",
        dataType: 'json',
        data: {pcity:city,pemail:email},
        success: function(res) { //controller has to make json_encode($data); for product res value.
            if (res)
            {
               if(res.message != "success"){
                   $("#emptyemail").html(res.message);
                   return false;
               }else{
                   $("#newslatter").hide();
                   $("#register_complete").show();
               }
            }
        }
    });

您的控制器需要添加echo json_encode($ data);

Function newslatter(){
    $city_id=$this->input->post('pcity',true);
    $email = $this->input->post("pemail",true);
    $query= $this->ajax_m->m_check_email($email);

    if(strlen($email)==0){
        $data["message"]= "Please fill in Email field";
    }else{
        if($query != null){
            $data["message"]= "E-mail already registered";
        }else{
            $this->ajax_m->m_insert_newslatter($city_id,$email);
            $data["message"]= "success";
        }
    }
echo json_encode($data);//add this line
}