将客户端生成的字符串序列化为服务器端文件angularJS

时间:2014-06-04 09:33:26

标签: angularjs

所以我正在构建一个实际上是xml文件的字符串。由于我无法从客户端保存任何文件以解决安全问题,我想将此字符串保存在xml文件服务器端。

我已经阅读了关于$ http方法或上传插件的内容,但是将字符串发送到我的服务器似乎有点复杂。

有更简单的方法吗?

出于提供信息的目的,这是我的代码:

$scope.addBlock = function(){
    if($scope.parentblock == null)//creation of a lvl1 element
    {
      var div = document.createElement("div");

      //xml creation
      var elmt = document.createElement($scope.selectedtype.tagname);
      //

      div.setAttribute('id',$scope.blocktitle);
      div.setAttribute('lvl',0);
      var path = '/'+$scope.selectedtype.tagname;
      div.setAttribute('path',path);

      div.innerHTML = '<h1>' + $scope.blocktitle + '</h1><p> path : '+ path + '</p>';
      if($scope.blockvalue)
      {
        div.innerHTML = div.innerHTML + '<p>' + $scope.blockvalue + '</p>';

        //adding value to xml tag
        elmt.innerHTML = $scope.blockvalue;
        //

      }

      document.getElementById('blocks').appendChild(div);

      //xml adding
      doc.appendChild(elmt);
      console.log(doc);
      //

          $scope.blocks.push([$scope.blocktitle,$scope.selectedtype.tagname,$scope.parentblock,path]);

     }
     else //creation of a lvl n element
    {
      var div = document.createElement("div");

      //xml creation
      var elmt = document.createElement($scope.selectedtype.tagname);
      //

       div.setAttribute('id',$scope.blocktitle);
      var lvl =      Number(document.getElementById($scope.parentblock[0]).getAttribute('lvl'))+1;
      div.setAttribute('lvl',lvl);
      var path = ($scope.parentblock[3]+'/'+$scope.selectedtype.tagname);

      div.innerHTML = '<h2>' + (new Array(lvl + 1).join("&nbsp")) + $scope.blocktitle +
      '</h2><p>' +  (new Array(lvl + 5).join("&nbsp")) + ' path : '+ path + '</p>';

      if($scope.blockvalue)
       {
        div.innerHTML = div.innerHTML +  '<p>' + (new Array(lvl + 5).join("&nbsp")) + 
        $scope.blockvalue + '</p>';

        //adding value to xml tag
        elmt.innerHTML = $scope.blockvalue;
        //

      }

      document.getElementById($scope.parentblock[0]).appendChild(div);

      //xml adding
       doc.getElementsByTagName($scope.parentblock[1].toLowerCase())[0].appendChild(elmt);
      //

          $scope.blocks.push([$scope.blocktitle,$scope.selectedtype.tagname,$scope.parentblock,path]);

    }
    //console.log(doc);

   }

我需要将doc发送到我的服务器。

编辑: 我真的需要发送一个xml,因为是一个iso19110规范化的文件,我必须保存。 我试过这个:

$http({
      method: 'POST',
      url: 'save.php',
      data:  { 'doc' : doc.outerHTML },
      headers: {'Content-Type': 'text/xml'}
    })
    .success(function(data){
      alert(data);
    })
    .error(function(){
      alert('fail');
    });

这在php中:

file_put_contents('test.xml', $_POST['doc'])

但我有“索引doc undefined”......

我也试过

$http.post('save.php',doc).success(function() {
      return console.log('uploaded');
    });

但我得到了'将循环结构转换为JSON'

所以我认为我的问题来自数据的位置。我无法想象它在哪里......

1 个答案:

答案 0 :(得分:0)

如果您需要向服务器发送一块文本(通过http),那么您应该使用$http.post()方法。它易于使用,就像一个魅力。您可以通过多种方式接收和保存服务器上的数据,可能是您已经解决了这个问题?

你的问题imo的真正问题是你是否真的需要发送xml?发送数据的一种更简单的方法是使用JSON。那么你就不需要经历所有文件构建工作。相反,您可以构建一个javascript对象并使用$http.post()方法发送它,让angular为您完成所有工作。

var doc;

doc = {
  id: $scope.blocktitle,
  lvl: 0
  // rest of your doc structure here
};

$http.post('/my-url/upload/doc', doc).success(function() {
  return console.log('uploaded');
});