【问题标题】:How to pass data to controller to view using json in php?如何将数据传递给控制器​​以在 php 中使用 json 进行查看?
【发布时间】:2014-03-27 16:27:07
【问题描述】:

我使用 codeigniter。我需要将数据传递给我的控制器以以某种方式查看。我设法将视图传递给控制器​​(当下拉选择的值使用 ajax 传递给控制器​​时) 这是我的 HTML 代码

<div class="form-group">
   <label for="lastname" class="control-label">Your Packages</label>
      <?php if(isset($tourbuddy_packages)){?>
           <select id="itemType_id" class="form-control input-sm" name="tripbuddy_PackageTitle" onChange="disp_text()">
             <?php
                  foreach ($tourbuddy_packages as $packages) {?>
                     <option value="<?php echo $packages['PackageID'] ?>"><?php echo $packages['PackageTitle']?></option>
                   <?php } ?>
            </select>
          <input type="hidden" name="PackageID" id="country_hidden">
          <?php }  else { ?>
                 <select class="form-control input-sm" name="tripbuddy_PackageTitle">
                        <option>Add Packages</option>
                 </select>
           <?php } ?>
</div>

当下拉选择一个值时,我使用 ajax 和 java 脚本将数据传递给控制器​​

$("#itemType_id").change(function() {
            $.ajax({
                url : "feature/tea/",
                method: "POST",
                data: "id=" + $(this).val(),
                success: function(response) {
                    // handle
                }
            })  
});

在控制器中选择 vale pass to tea 方法

 public function tea()
    {

        $this->session->set_userdata(array('tripbuddy_PackageID'=>$_POST['id']));


    $package_data = $this->ci->package_model->get_package($_POST['id']);
    $package_cat =  $this->ci->package_model->get_package_categories();
    $data = array();
    $data['tourbuddy_selected_package'] = $package_data[0];
    $data['tourbuddy_selected_package_cat'] = $package_cat;
    //echo $data['package']['AlbumID'];
    $data['tourbuddy_selected_photos'] = $this->photo->get_package_photo_stream($data['tourbuddy_selected_package']['AlbumID']);    
    //echo var_dump($data['photos']);

    echo json_encode($data);

    }

现在我需要将 $data 数组传递给我的视图而不刷新视图页面我该怎么做?需要快速帮助

【问题讨论】:

标签: php jquery ajax json codeigniter


【解决方案1】:

首先您需要将正确的标头添加到您的 tea() 函数中,因为它将返回 json

public function tea()
{
    header('Content-Type: application/json');

   //...
}

然后您需要将dataType 参数添加到您的ajax 调用中

$("#itemType_id").change(function() {
    $.ajax({
        url : "feature/tea/",
        method: "POST",
        dataType: 'json', //Added this
        data: "id=" + $(this).val(),
        success: function(response) {
            // handle
        }
    })  
});

在您的成功函数中,您将能够访问类似的数据

success: function(response) {
    response.tourbuddy_selected_photos.data
}

【讨论】:

  • 当访问数据时我可以像这样访问 tourbuddy_selected_photos 数组中的数据
【解决方案2】:

控制器

class Feature extends CI_Controller
    {
        public function tea()
        {
            $post = $this->input->post(); //do some form validation here

            $model = Model::get($post); // do all business logic in the model

            if(!$model){
                //return a Response header rather than a 404View
                return $this->output->set_status_header(404); 
            }

            $responce = array(
                'something'  =>  $model->something
            );

            return $this->output
                ->set_content_type('application/json')
                ->set_output(json_encode($responce))
                ->set_status_header(200);
        }
    }

未经测试的Javascript

 var URL = <?php echo site_url(); ?>// Global URL variable

    (function($){

        var Form = {
            init : function(){
                this.Form = $("form#formId"),
                this.ItemType = this.Form.find("#itemtype_id");

                this.ItemType.on('change', $.proxy(this.change, this));
            },
            /**
             * -----------------------------------------------------------------
             * Bind the ItemTypeId change event to this function using $.proxy
             * Ajax return's a deffered(promise) so capture it, and do stuff
             * -----------------------------------------------------------------
            **/
            change : function(event){
                this.doAjax(event.target).then(
                    function( data ) // success
                    {
                        $(this).html('Success'); // $(this) -> context
                    },
                    function( reason ) //fail
                    {
                        switch(reason.code)
                        {
                            case 404:
                            default:
                                $(this).html('no results found');
                            break;

                        }
                    }
                );
            },
            /**
             * -----------------------------------------------------------------
             * Make the ajax request a wait for it to return a promise
             * -----------------------------------------------------------------
            **/
            doAjax : function( target ){
                var data = {
                    id : target.id
                }
                return $.ajax({
                    cache: false,
                    url : URL + 'feature/tea/',
                    context : target,
                    method: "POST",
                    data : data,
                    dataType : 'json',
                }).promise();
            }
        }

        Form.init();

    }(jQuery));

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2017-10-12
    • 2017-06-08
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多