var WinFileSee = new Ext.Window({
  title : '文件查看',
  width : 450,
  height : 350,
  layout : 'fit',
  items : [{
                   xtype : 'textarea',
   id:'File_Body',
   name : 'File_Body',
   allowBlank : true
        }],
  buttonAlign : 'center',
  buttons : [{
  text:'关闭',
  scope : this,
  handler : function(){
  WinFileSee.close();
  }
  },{
  text:'读取文件',
  scope : this,
  handler : function(){
  //请求后台数据,得到文件内容
  Ext.Ajax.request({
  url: app + '/File/SeeDownLoadFile',
  params : {
  FilePath : Row[0].data.FileLocal
},
  scope : this,
  success : function(_res,_opts){
  if(_res.responseText)
  {
  data = Ext.decode(_res.responseText);
  Ext.getCmp('File_Body').setValue(data.file);
  }
  },
  failure : function(){
  Ext.Msg.alert("系统提示","通讯失败!");
  }
  });
  }
  }]
  });
  WinFileSee.show();代码如上,想要的功能是,后台程序读取txt文本文件,得到内容后,将内容显示到textarea文本框中
后台采用PHp代码
代码如下:    public function SeeDownLoadFile()
     {
       $file_Path = $_POST['FilePath'];
       if(file_exists($file_Path))
       {
       $file_handle = fopen($file_Path, "r");
 while (!feof($file_handle)) 
 {
    $line = $line.fgets($file_handle);
 }
 fclose($file_handle);
 echo '{success:true,file:"'.$line.'"}';
       }
       else
       {
         echo '{success:true,file:"文件不存在..."}';
       }
     }结果是,JSon字符串不正确,因为有换行符,但是前台显示又必须有换行,请问各位,这种问题还有别的方式么》?或者怎么解决?

解决方案 »

  1.   

    JSON输出的时候,把换行转成\n
      

  2.   

    替换换行符,楼主可以这样解决//解决回车换行
    value = value.Replace("\r\n", "\\r\\n");
      

  3.   

    将后台获取数据,替换所有的“\r\n”为“\\r\\n”,楼主试试看还行不行
      

  4.   

    echo json_encode(array('success'=>true,'file'=>$line));
      

  5.   

    另外,还有一个问题请教各位,问题是这样的,一个树控件,做权限管理,基本上已经可以玩了,不过结果让我很郁闷,
    我把权限存到数据库,然后查询该人的权限,把不具有的菜单项隐藏掉,我就想着写个递归函数,我的递归貌似有问题,各位帮忙看看  function RemoveChildNode(_parentNode) {
    var _nodArry = _parentNode.childNodes;    //获取该节点下的所有子节点
    for(i = 0; i < _nodArry.length; i++){
    if(!_nodArry[i].isLeaf()) {                        //判断该节点是父节点还是子节点
    _nodArry[i].reload();                     //做一次从新加载,因为用的是异步树,不加载,获取不到子节点
    if (_nodArry[i].isLoaded()) {
    var childarry = _nodArry[i].childNodes;       
    RemoveChildNode(_nodArry[i]);
    }
    }else{
    if(modulearray.indexOf(_nodArry[i].id) == -1){      //如果该节点的iD在后台权限ID数组中,不隐藏,否则,隐藏该节点。
    _nodArry[i].getUI().hide();
    }
    if(!_parentNode.isExpandable()){     //这里是判断父节点下,还有没有子节点,因为我隐藏了,父节点下没有子节点了,我想连带父节点也隐藏了,可惜这里的判断无效,隐藏了,但是还是有子节点,这里也是一个问题点。本来父节点下的子节点全部隐藏了,看不到了,就一个父节点了,怎么判断下,把父节点也隐藏了??
    _parentNode.getUI().hide();
    }
    }
    }
    }
       //调用
       listeners : {
    "expand" : function(_node){
    var _nodArry = _node.childNodes; //获取其所有子节点
    RemoveChildNode(_node);
    }
    }
      

  6.   

    呵呵,着玩意遍历有问题,加入一个树根节点下,有3个子节点,没个子节点,又有它的孩子结点,然后遍历就有问题了,,只能遍历一个根节点下的全部子节点,另外两个子节点没法遍历噢如下:个人办公
         考勤管理
              请假记录
              外派记录
         个人办公
              工作日志
              重要任务像上面这种树,使用哪个函数,遍历的时候,就只能遍历考勤管理,个人办公没法遍历了噢。
    我的调用是在跟 结点上调用的,在其展开事件中写的调用。
    listeners : {
    "expand" : function(_node){
    var _nodArry = _node.childNodes; //获取其所有子节点
    RemoveChildNode(_node);
    //_nodArry[0].remove();   //删除子节点
    }
    }
          
      

  7.   

    额晕,,没人回答啊,,擦擦,自己回答吧,   /**
     * 遍历树节点,检查权限。将用户不存在的权限隐藏掉
     * @param {菜单项树的根节点} _parentNode
     */
    function RemoveChildNode(_parentNode) {
    //获取其所有子节点
    var _nodArry = _parentNode.childNodes;

    for (var i = 0; i < _nodArry.length; i++) {    //上面不行的原因是这里,var i = 0,而上面是 i=0就这个小错误,导致结果不正确。
    if (!_nodArry[i].leaf) {
    _nodArry[i].reload();
    if(_nodArry[i].isLoaded()){
    RemoveChildNode(_nodArry[i]);
    }
    } else {
    if (modulearray.indexOf(_nodArry[i].id) == -1) {
    _nodArry[i].getUI().hide();
    }
    var parentnodes = _nodArry[i].parentNode;
    if (!_parentNode.isExpandable()) {
    _parentNode.getUI().hide();
    }
    }
    }
    }
      

  8.   

    另外,那我老大告诉我,如何判断Tree父节点下的子节点全部隐藏了???
    权限这里好了,,可是当父节点下没有子节点的时候,要将父节点也隐藏了,但是怎么判断父节点下的子节点都隐藏了呀???