Использование JQuery JSON в CodeIgniter - PullRequest
2 голосов
/ 07 декабря 2011

В CI я настроил контроллер методом logsig (). Затем в моем методе index () я вызываю представление с именем startpage. На мой взгляд, я использую 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>

Ответы [ 3 ]

8 голосов
/ 08 декабря 2011

Контроллер не может загружать представления и возвращают 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 голосов
/ 24 сентября 2012

Попробуйте

Контроллер ---------

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;
            }
0 голосов
/ 08 декабря 2011

Если я правильно прочитал ваш вопрос, ваш код обратной передачи JS не работает:

url: "processing/logsig.php",

Ваш URL CI должен выглядеть примерно так:

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

Для функции site_url() требуется URL-помощник. Загрузите это в начале вашей loadsig() функции:

$this->load->helper('url');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...