2011-12-07 31 views
2

在CI中,我使用logsig()方法设置了一个控制器。然后在我的index()方法中,我调用一个名为startpage的视图。在我看来,我使用JSON在我的视图和我的控制器之间进行异步调用。我将如何编码呼叫。下面是我的代码有:在CodeIgniter中使用jQuery JSON

位指示:

function logsig() { 
$this->load->view('startpage', $sync); 
header('Content-type:application/json'); ............. 

查看:

<script type="text/javascript" language="javascript"> 
$(document).ready(function() { 
    // blink script 
    $('#notice').blink(); 

    $("#action_button").click(function() { 
     var username = $("#username").val(); 
     var password = $("#password").val(); 
     var dataString = '&username=' + username + '&password=' + password; 
     if(username=='' || password=='') { 
      $('#success').fadeOut(400).hide(); 
      $('#error').fadeOut(400).show(); 
     } else { 
      $.ajax({ 
      type: "POST", 
      dataType: "JSON", 
      url: "processing/logsig.php", 
      data: dataString, 
      json: {session_state: true}, 
      success: function(data){ 
      if(data.session_state == true) { // true means user is logged in. 
       $("#main1").hide(); 
       $('#main1').load('<?=$sync?>').fadeIn(); 
      } else if(data.session_state == false) { // false means user is being registered. 
       $("#action_button").remove(); 
       $('#success').load('<?=$sync?>'); 
       // onLoad fadeIn 
      } 
      } 
     }); 
     } 
    }); 
}); 
</script> 
+0

您是否收到任何错误?什么不工作? –

+0

我似乎无法弄清楚如何从视图中调用logsig()方法。 –

回答

8

你不能让你的控制器在同一时间加载一个视图返回JSON。将JSON部分分解为单独的函数。

一个过于简单的例子看起来是这样的:

// Your existing function, but only displaying the view 
function logsig() { 
    $this->load->view('startpage', $sync); 
} 

// A new function whose sole purpose is to return JSON 
// Also notice we're using CI's Output class, a handy way to return JSON. 
// More info here: codeigniter.com/user_guide/libraries/output.html 
function get_json() { 
    $this->output->set_content_type('application/json') 
       ->set_output(json_encode(array('foo' => 'bar'))); 
} 

然后,在你的JavaScript,请致电get_json

$.ajax({ 
    type: "POST", 
    dataType: "JSON", 
    url: "<?php echo site_url('processing/get_json.php'); ?>", 
    // ... truncated for brevity ... 
}); 
0

如果我正确地读你的问题,你的JS代码回传不工作:

url: "processing/logsig.php", 

您的CI网址应该是这样的:

url: <?php echo site_url("processing/logsig"); ?>, 

site_url()函数需要URL助手。加载在你loadsig()函数的开头:

$this->load->helper('url'); 
0

尝试这个

控制器---------

public function AjaxTest() {  

     $rollNumber = $this->input->post('rollNumber'); 

     $query = $this->welcome_model->get_students_informationByRoll($rollNumber); 
     $array = array($query); 
     header('Content-Type: application/json', true); 
     echo json_encode($array); 
    } 

查看-----

<?php echo validation_errors(); ?> 
     <?php echo form_open('welcome/SearchStudents'); ?> 

     <input type="text" id="txtSearchRoll" name="roll" value="" /> 
     <input type="submit" name="btnSubmit" value="Search Students" onclick="return CheckAjaxCall();"/> 

     <?php echo '</form>'; ?> 

脚本----------

function CheckAjaxCall() 
      { 
       $.ajax({ 
        type:'POST', 
        url:'<?php echo base_url(); ?>welcome/AjaxTest',      
        dataType:'json', 
        data:{rollNumber: $('#txtSearchRoll').val()},      
        cache:false, 
        success:function(aData){       
         //var a = aData[0];      
         //alert(a[0].roll); 

         $.map(aData, function (item) { 

          var stData = "<td>"+ item[0].roll +"</td>" + 
           " <td>"+item[0].Name+"</td>" + 
           "<td>"+item[0].Phone+"</td>" + 
           "<td> <a href=\"<?php echo base_url(); ?>welcome/EditStudents/"+ item[0].roll +"\">Edit</a> </td>"+ 
           "<td> <a href=\"<?php echo base_url(); ?>welcome/DeleteStudents/"+item[0].roll+"\">Delete</a> </td>"; 
          $('#tblStudent').text(""); 
          $('#tblStudent').append(stData); 
          //alert (item[0].roll + " " + item[0].Name); 
         }); 

         //alert(aData); 
        }, 
        error:function(){alert("Connection Is Not Available");} 
       }); 

       return false; 
      }