【问题标题】:how to get response from json ajax call in codeigniter view?如何从codeigniter视图中的json ajax调用获得响应?
【发布时间】:2013-02-19 15:40:35
【问题描述】:

在我看来,我试图从 codeigniter 控制器获得响应,但没有成功。这是我的 javascript 文件中的代码:

 // user enter his e-mail so check him against the database.
   $("#formSendPassword").submit(function(e){     

       e.preventDefault();

        var email = $(this).find("#checkemail").val();

        var obj = {email: email};
        var url = $(this).attr("action");
        var data =  {email: email};

        $.post(url, obj,data, function(jsonResp){
           console.log(success);
            if(jsonResp.success) {
                     alert(jsonResp['success']);
                    $('#successMailMessage').fadeIn();

          }  else {
                    alert("Fail");
                    $('#errorMailMessage').fadeIn();
                    }

        }, 'json');
    })

我的控制器中的代码如下:

 public function checkEmail()
    {     
        // set the validation rules
        $this->form_validation->set_rules('checkemail', 'E-Mail', 'valid_email|required|trim|encode_php_tags');

        $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
        // if validation is passed
        if ($this->form_validation->run() != FALSE) 
        {
            $ids=array();
            $ids[0]=$this->db->where('email', $this->input->post('checkemail'));

            $query = $this->backOfficeUsersModel->get();
            if($query)
            {

                $data = array(
                    'userid'       => $query[0]['userid'],
                    'username'       => $query[0]['username'],
                    'password'       => $query[0]['password'],
                    'firstname'       => $query[0]['firstname'],
                    'lastname'       => $query[0]['lastname'],
                    'email'       => $query[0]['email']
                ); 

                $jsonResp['success'] = "Ok";
                $jsonResp = array();
        } else {   
               // echo json_encode(array("success" => false, "error" => "Wrong email"));
                $jsonResp['success'] = "Fail";
        }
        //  form validation has failed 
        } else {     
            $errorMessage = "Please enter valid e-mail";
        }
    }   // end of function checkEmail 

如您所见,我正在尝试在我的 js 文件中控制台记录成功,但没有成功。 谁能告诉我我做错了什么?

问候,卓然

【问题讨论】:

  • 您为什么尝试将objdata 都传递给$.post
  • 你在哪里使用echo/print 输出到浏览器?
  • 我尝试在 javascript 中控制台记录输出,但我什么也没得到。
  • Musa 我把它们都加了,因为它们都没有返回任何结果

标签: jquery ajax json codeigniter


【解决方案1】:

您的控制器正在设置最终数据,但您并未将其打印出来。我没有发现您的数组使用 json_encode 转换为 json 然后打印出来。

试试看。另外,您正在填充数组,然后为什么要再次执行 = array() ?

$jsonResp['success'] = "Ok";
$jsonResp = array();

看看这个链接对你有没有帮助:http://amitavroy.com/justread/content/articles/getting-ajax-data-using-views-codeigniter

【讨论】:

  • 我添加了 echo json_encode($jsonResp);上面两行的波纹管,我什么也没得到。 console.log 仍然是空的。什么也没发生。
【解决方案2】:

您应该使用 $data 数组元素来存储您的 json 响应,然后再将其传递给视图。此视图是您的 javascript 回调正在寻找的 json 响应。我的猜测是您的控制台日志调用永远不会触发。

尝试以下方法:

在您的控制器代码中类似于:

 $data['json'] = json_encode(array("success" => false, "error" => "Wrong email"));
 $this->load->view('json_response', $data);

如下定义视图:

<?php
    $this->output->set_header('Content-Type: application/json; charset=utf-8');
    echo $json;
?>

您还应该在 jQuery 调用中定义一个数据类型 (dataType: "json")。

编辑:所以你的 jQuery post 调用应该如下所示:

$.post(url, data, function(data) {
    console.log(data.sucess);
}, "json");

你也不需要传递 obj 。此外,您需要记录 data.success,而不仅仅是成功。告诉我

【讨论】:

  • 我目前正在尝试做的是 console.log 我的控制器代码的输出。我暂时在代码中注意到了。添加 $data['json'] = json_encode(array("success" => false, "error" => "Wrong email"));我正在尝试在我的javascript中控制台记录json,如下所示:console.log(jsonResp);但我注意到了。
  • 我看到你想从你的控制器登录 - 最好的做法仍然是通过加载我写的视图来做到这一点。我还在回答中添加了具体的jQuery函数供大家参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多