Javascript 带有json格式数据的AJAX脚本不工作

Javascript 带有json格式数据的AJAX脚本不工作,javascript,php,jquery,ajax,codeigniter,Javascript,Php,Jquery,Ajax,Codeigniter,我的完整脚本如下 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a

我的完整脚本如下

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>        
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
    <script type="text/javascript">
        $(window).on('load',function(){
            $('#myModal').modal('show');
        });
    </script>
    <script>
        $( document ).ready(function () {
            $("#vote").click(function (e) {
                var poll_id = $('input[name=pollID]', '#myForm').val();
                var poll_option_id = $('input[name=voteOpt]:checked', '#myForm').val() ;
                //alert(poll_id + "AND" + poll_option_id);
                $.ajax({
                    type: "POST",
                    url: "http://localhost/poll/index.php/form/poll",
                    data: {poll_id: poll_id, poll_option_id: poll_option_id},
                    dataType: "json",
                    success: function(data) {
                        alert(data);
                    }, error: function() {
                        alert("ERROR");
                    }
                });
            });
        });
    </script>
现在的问题是,modal在页面加载时可以完美地执行。但是ajax不起作用,成功部分也没有执行,错误部分也没有。另外,在ajax之前取消注释警报时,会发出正确的警报值。我想不出这个错误。
请帮助

我可以看到包含了许多javascript库。很肯定其中有些是相互矛盾的。 在$(document.ready()之前尝试此操作:-

在查看表单控制器代码之后,我可以看到您只是返回了一个文本。所以ajax数据类型应该是HTML而不是json。dataType参数用于定义返回值的类型。 我只能在你的代码中看到这一错误点。您的控制台响应状态也很好,这意味着数据类型是错误的

dataType=服务器响应的预期数据类型

dataType:'html'

我可以看到包含了很多javascript库。很肯定其中有些是相互矛盾的。 在$(document.ready()之前尝试此操作:-

在查看表单控制器代码之后,我可以看到您只是返回了一个文本。所以ajax数据类型应该是HTML而不是json。dataType参数用于定义返回值的类型。 我只能在你的代码中看到这一错误点。您的控制台响应状态也很好,这意味着数据类型是错误的

dataType=服务器响应的预期数据类型

dataType:'html'

例如。

请看,您可以检查脚本是否以这种方式发送post值

在控制台>网络选项卡中。您可以查看哪些post值作为post发送

现在我有了PHP Codeigniter中的代码,对我来说,下面的代码工作得很好

$("#username").keyup(check_if_username_exists);

    function check_if_username_exists() {

    var username = $("#username").val();

    var sRet = false;

    $.ajax(
     {
        type:"post",
        async: false,
        url: "<?php echo site_url('distributor/tenant/check_username_exists'); ?>",
        data:{ username:username},

        success:function(response)
        {   

            var parent_fieldset = $("#username").parents('fieldset');
            $("#username").parent().addClass('has-error');

            if (response == "true") 
            {
                $('#span').html('<span style="color: #0fa7b5;">'+"Login Username"+"</span>");

                $("#username").removeClass('input-error');

                $("#username").parent().removeClass('has-error');

                console.log('Success! This Username is available');

                hideToastr();

                sRet = true;

            }
            else 
            {   
                show_error("Error","Oops! This Username is already taken");

                $("#username").addClass('input-error');

                $('#span').html('<span style="color:red;">Username already Exists!</span>');

                console.log('Oops! This Username is already taken');     

                sRet = false;
            }  


        }
      });

    console.log("End Of Username Exists " + sRet);
    return sRet;
}
更新2:

public function poll() {
        $polldata = json_decode($_POST);

        echo $polldata;

} 
public function poll() {


        $polldata = json_decode($_POST);

        echo $polldata;
        $pollid = $polldata->pollID;
        $voteData = array(
            'poll_id' => $pollid,
            'poll_option_id' => $polldata->pollID->voteOpt
        );
        $voteSubmit = $this->modal->vote($voteData);
        if($voteSubmit){ 
            echo 'Your Vote Has Been Submitted successfully.';
        }else{
            echo 'You Had Already Voted.';
        }

} 
现在对于您的控制器,我看不出您在哪里编码或解码json数据。 如果要将值作为JSON POST发送到控制器,则必须对其进行解码

第一个检查是您正在控制器中获取JSON数据。 如果工作正常,则尝试第二步。 第1步:

public function poll() {
        $polldata = json_decode($_POST);

        echo $polldata;

} 
public function poll() {


        $polldata = json_decode($_POST);

        echo $polldata;
        $pollid = $polldata->pollID;
        $voteData = array(
            'poll_id' => $pollid,
            'poll_option_id' => $polldata->pollID->voteOpt
        );
        $voteSubmit = $this->modal->vote($voteData);
        if($voteSubmit){ 
            echo 'Your Vote Has Been Submitted successfully.';
        }else{
            echo 'You Had Already Voted.';
        }

} 
第二步:

public function poll() {
        $polldata = json_decode($_POST);

        echo $polldata;

} 
public function poll() {


        $polldata = json_decode($_POST);

        echo $polldata;
        $pollid = $polldata->pollID;
        $voteData = array(
            'poll_id' => $pollid,
            'poll_option_id' => $polldata->pollID->voteOpt
        );
        $voteSubmit = $this->modal->vote($voteData);
        if($voteSubmit){ 
            echo 'Your Vote Has Been Submitted successfully.';
        }else{
            echo 'You Had Already Voted.';
        }

} 

如果您遇到任何问题,请告诉我。

例如。

请看,您可以检查脚本是否以这种方式发送post值

在控制台>网络选项卡中。您可以查看哪些post值作为post发送

现在我有了PHP Codeigniter中的代码,对我来说,下面的代码工作得很好

$("#username").keyup(check_if_username_exists);

    function check_if_username_exists() {

    var username = $("#username").val();

    var sRet = false;

    $.ajax(
     {
        type:"post",
        async: false,
        url: "<?php echo site_url('distributor/tenant/check_username_exists'); ?>",
        data:{ username:username},

        success:function(response)
        {   

            var parent_fieldset = $("#username").parents('fieldset');
            $("#username").parent().addClass('has-error');

            if (response == "true") 
            {
                $('#span').html('<span style="color: #0fa7b5;">'+"Login Username"+"</span>");

                $("#username").removeClass('input-error');

                $("#username").parent().removeClass('has-error');

                console.log('Success! This Username is available');

                hideToastr();

                sRet = true;

            }
            else 
            {   
                show_error("Error","Oops! This Username is already taken");

                $("#username").addClass('input-error');

                $('#span').html('<span style="color:red;">Username already Exists!</span>');

                console.log('Oops! This Username is already taken');     

                sRet = false;
            }  


        }
      });

    console.log("End Of Username Exists " + sRet);
    return sRet;
}
更新2:

public function poll() {
        $polldata = json_decode($_POST);

        echo $polldata;

} 
public function poll() {


        $polldata = json_decode($_POST);

        echo $polldata;
        $pollid = $polldata->pollID;
        $voteData = array(
            'poll_id' => $pollid,
            'poll_option_id' => $polldata->pollID->voteOpt
        );
        $voteSubmit = $this->modal->vote($voteData);
        if($voteSubmit){ 
            echo 'Your Vote Has Been Submitted successfully.';
        }else{
            echo 'You Had Already Voted.';
        }

} 
现在对于您的控制器,我看不出您在哪里编码或解码json数据。 如果要将值作为JSON POST发送到控制器,则必须对其进行解码

第一个检查是您正在控制器中获取JSON数据。 如果工作正常,则尝试第二步。 第1步:

public function poll() {
        $polldata = json_decode($_POST);

        echo $polldata;

} 
public function poll() {


        $polldata = json_decode($_POST);

        echo $polldata;
        $pollid = $polldata->pollID;
        $voteData = array(
            'poll_id' => $pollid,
            'poll_option_id' => $polldata->pollID->voteOpt
        );
        $voteSubmit = $this->modal->vote($voteData);
        if($voteSubmit){ 
            echo 'Your Vote Has Been Submitted successfully.';
        }else{
            echo 'You Had Already Voted.';
        }

} 
第二步:

public function poll() {
        $polldata = json_decode($_POST);

        echo $polldata;

} 
public function poll() {


        $polldata = json_decode($_POST);

        echo $polldata;
        $pollid = $polldata->pollID;
        $voteData = array(
            'poll_id' => $pollid,
            'poll_option_id' => $polldata->pollID->voteOpt
        );
        $voteSubmit = $this->modal->vote($voteData);
        if($voteSubmit){ 
            echo 'Your Vote Has Been Submitted successfully.';
        }else{
            echo 'You Had Already Voted.';
        }

} 

如果您遇到任何问题,请告诉我。

您的泳池应该是这样的

   if($voteSubmit){ 
                echo json_encode(array('msg' =>'Your Vote Has Been Submitted successfully.'));
            }else{
                echo json_encode(array('msg' =>'You Had Already Voted.'));
            }
 success: function(data) {
                    alert(data.msg);
                }, 
error: function() {
                    alert("ERROR");
                }
你的成功应该是这样的

   if($voteSubmit){ 
                echo json_encode(array('msg' =>'Your Vote Has Been Submitted successfully.'));
            }else{
                echo json_encode(array('msg' =>'You Had Already Voted.'));
            }
 success: function(data) {
                    alert(data.msg);
                }, 
error: function() {
                    alert("ERROR");
                }

你的游泳池应该是这样的

   if($voteSubmit){ 
                echo json_encode(array('msg' =>'Your Vote Has Been Submitted successfully.'));
            }else{
                echo json_encode(array('msg' =>'You Had Already Voted.'));
            }
 success: function(data) {
                    alert(data.msg);
                }, 
error: function() {
                    alert("ERROR");
                }
你的成功应该是这样的

   if($voteSubmit){ 
                echo json_encode(array('msg' =>'Your Vote Has Been Submitted successfully.'));
            }else{
                echo json_encode(array('msg' =>'You Had Already Voted.'));
            }
 success: function(data) {
                    alert(data.msg);
                }, 
error: function() {
                    alert("ERROR");
                }

//更改投票功能

public function poll() {
    $this->output->set_content_type('application/json');
    $pollid = $this->input->post('pollID');
    $voteData = array(
        'poll_id' => $pollid,
        'poll_option_id' => $this->input->post('voteOpt')
    );
    $voteSubmit =$this->modal->vote($voteData);
    if($voteSubmit){ 
        $this->output->set_output(json_encode(array('msg' => 'Your Vote Has Been Submitted successfully.')));
    }else{
        $this->output->set_output(json_encode(array('msg' => 'You Had Already Voted.')));
    }
}
以及Ajax成功回调的一个小变化

success: function(data) {
    alert(data.msg);
    //option to view data in console log
    console.log(data);
},

//更改投票功能

public function poll() {
    $this->output->set_content_type('application/json');
    $pollid = $this->input->post('pollID');
    $voteData = array(
        'poll_id' => $pollid,
        'poll_option_id' => $this->input->post('voteOpt')
    );
    $voteSubmit =$this->modal->vote($voteData);
    if($voteSubmit){ 
        $this->output->set_output(json_encode(array('msg' => 'Your Vote Has Been Submitted successfully.')));
    }else{
        $this->output->set_output(json_encode(array('msg' => 'You Had Already Voted.')));
    }
}
以及Ajax成功回调的一个小变化

success: function(data) {
    alert(data.msg);
    //option to view data in console log
    console.log(data);
},


你的意思是做一个POST请求,还是这应该是一个GET请求?是的,我想做一个POST请求OK,我还注意到您正在调用localhost上的一个文件-您确定没有发生CORS问题吗?您是否对AJAX的响应进行了json_编码?您从轮询函数返回了什么?您的意思是执行POST请求还是GET请求?是的,我想执行POST请求OK,我还注意到您正在调用localhost上的一个文件-您确定没有发生CORS问题吗?您是否对AJAX的响应进行了json_编码?您从轮询函数返回了什么?您能否找到导致soOkay的原因,这意味着初始错误已解决。代码执行向前推进。检查控制台是否有错误。您可以在这里共享您的HTML吗?关于警告错误,即通过
alert(JSON.stringify(data))它提醒
{“readyState”:4,“responseText”:“\r\n\r\n”,“status”:200,“stat”‌​usText“:“OK”}
是的,您是正确的,现在poll\u id和poll\u option\u id值在函数poll中没有被访问,当我尝试使用print\u打印它们的值时,您可以找到导致这些值的原因吗?soOkay,这意味着初始错误已解决。代码执行向前推进。检查控制台是否有错误。您可以在这里共享您的HTML吗?关于警告错误,即通过
alert(JSON.stringify(data))它提醒
{“readyState”:4,“responseText”:“\r\n\r\n”,“status”:200,“stat”‌​usText“:“OK”}
是的,您是正确的,现在poll_id和poll_option_id值在函数poll中没有被访问,当我尝试使用print_rDid类似的东西打印它们的值时,下面发生了警报错误,即通过
警报(JSON.stringify(data))它提醒
{“readyState”:4,“responseText”:“\r\n\r\n”,“status”:200,“stat”‌​usText:“OK”}
字符串的json编码在哪里???我猜您使用的是PHP,那么您在哪里对json数据进行编码呢?你能把你的PHP代码发到哪里去编码你的数据吗?我的PHP函数poll已经在哪里提交数据的问题中了。我可以看到,但是你的json编码和解码在哪里??我在我的回复中发布了一个更新,做了类似的事情,并且在警报错误上发生了以下事件,即,通过
alert(JSON.stringify(data))它提醒
{“readyState”:4,“responseText”:“\r\n\r\n”,“status”:200,“stat”‌​usText:“OK”}
字符串的json编码在哪里???我猜您使用的是PHP,那么您在哪里对json数据进行编码呢?你能把你的PHP代码发到哪里去编码你的数据吗?我的PHP函数poll已经在哪里提交数据的问题中了。我可以看到,但是你的json编码和解码在哪里??我正在更新我的答案