用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4531|回复: 4
收起左侧

[Web] 关于数据传递问题

[复制链接]
发表于 2010-3-31 01:11:57 | 显示全部楼层 |阅读模式
本帖最后由 consatan 于 2010-3-31 01:14 编辑

通过JSON编码的旧数据,传递到前台用input存储,然后再通过表单将旧数据的JSON编码 和 新数据的JSON编码一起提交到后台
有比较方便的数据传递方法吗??

控制器
PHP复制代码
 
<?php
  class A extends Controller {
    function A() {
      parent::Controller();
    }
    function edit_info($id) {
      $this->load->Model('A_MODEL');
      $result = $this->A_MODEL->get_info($id);  //return $this->db->query($sql)->result_array();
      $data = array('old_values' => json_encode($result['old']),
                             'show_info' => $result['show']
                          );
      $this->load->view('edit_info',$data');
    }
 
    function update_info() {
      $new_values = $this->input->post('
new_values');
      $old_values = $this->input->post('
old_values');
      //dosomething...
    }
  }
?>

 
复制代码

视图
PHP复制代码
 
<form method="POST" action="<?php echo site_url(array('A','update_info')) ?>">
  <input type="hidden" id="old_values" name="old_values" />
  <input type="hidden" id="new_values" name="new_values" />
   someHTMLcode...
  <script type="text/javascript" src="<?php echo base_url().'js/json2.js' ?>" ></script>
  <script type="text/javascript">
    <?php echo "var ov = (".$old_values.");\n"; ?>
    //这里该怎么改?
   //<input type="hidden" value="<?php echo $old_values ?>" />
    //可以吗?
    document.getElementById("old_values").value = JSON.stringify(ov);
    function _form_sumbit(_form) {
      var arr = new Array();
      for(var i = 0; i < _from.getElementsByTags("input").length; i++) {
        //dosomething...
      }
      document.getElementById("new_values").value = JSON.stringify(arr);
      _from.submit();
    }
  </script>
  <input type="button" id="_submit" name="_submit" />
</form>
 
复制代码
发表于 2010-3-31 15:31:50 | 显示全部楼层
用json格式传递数据再设置是可行的,
不过,
这种数据还是按常规方法传回视图比较合适
控制器中取到$data;
视图中把$var_name放到value中
 楼主| 发表于 2010-3-31 15:52:39 | 显示全部楼层
用json格式传递数据再设置是可行的,
不过,
这种数据还是按常规方法传回视图比较合适
控制器中取到$data;
...
zycbob 发表于 2010-3-31 15:31

如果控制器取到$data,但是存为数组的格式,那传到视图,视图该怎么再传回控制器呢??
发表于 2010-3-31 15:55:25 | 显示全部楼层
<input type="text" id="username" name="username" value="<?php echo $username ?>" />
正常传回来啊
 楼主| 发表于 2010-3-31 22:57:44 | 显示全部楼层
zycbob 发表于 2010-3-31 15:55

不行,这样无法传递数据的
因为JSON的格式是类似
[{"id":"1","name":"xx","age":"23"},{"id":"2","name":"oo","age":"34"}]
这样的字符串
如果直接
<input type="hidden" id="x" name="x" value="<?php echo $json_data ?>" />
的话,则HTML就会变成
<input type="hidden" id="x" name="x" value="[{"id":"1","name":"xx","age":"23"},{"id":"2","name":"oo","age":"34"}]" />
这样再提交到后台时,数据就变为空了
print_r($_POST['x']);  //显示为 [x] =>

不过刚我突然想到...旧数据用来显示,但是传递到后台的新数据应该是和数据库中的旧数据对比才对啊...不应该是和前台保存的旧数据对比啊...
我之前想错了...所以JSON数据还是不传到前台了...直接前台把新的JSON数据传递过来,然后后台再获取数据库数据来进行对比了...

本版积分规则