所以我正在构建一个实际上是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(" ")) + $scope.blocktitle +
'</h2><p>' + (new Array(lvl + 5).join(" ")) + ' path : '+ path + '</p>';
if($scope.blockvalue)
{
div.innerHTML = div.innerHTML + '<p>' + (new Array(lvl + 5).join(" ")) +
$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'
所以我认为我的问题来自数据的位置。我无法想象它在哪里......
答案 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');
});