借宝地记录笔记。通过数据服务提交增删改字符串请求体。注释未改完。
看之前应对post请求/响应有所了解。https://www.cnblogs.com/Im-Victor/p/9405974.html
或者对axios等有所了解。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title data-i18n="resources.title_tiledMapLayer4326"></title>
<script type="text/javascript" src="../js/include-web.js"></script>
<!--
帮助文档http://support.supermap.com.cn:8090/iserver/help/html/zh/index.htm
json_parse.js 提供了 JSON 字符串的解析函数 json_parse,
toJSON.js 提供了获取 XMLHttpRequest 对象的函数 getcommit、将 JavaScript 对象转化为 JSON 字符串的函数 toJSON
-->
<script type="text/javascript" src="../js/json_parse.js"></script>
<script type="text/javascript" src="../js/toJSON.js"></script>
</head>
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
<div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
<div style="position:absolute;left:90px;top:30px;z-index:999">
<input value='添加点' type="button" onclick=addpoint()>
<input value='添加线' type="button" onclick=addline()>
<input value='get线' type="button" onclick=getline()>
<input value='批量更新线' type="button" onclick=updatelines()>
<input value='更新单条线' type="button" onclick=updateline()>
<input value='IDs批量删除线' type="button" onclick=deletelineids()>
<input value='ID单个删除线' type="button" onclick=deletelineid()>
<input value='SQL删除线' type="button" onclick=deletelinesql()>
<input id="pos" value='24,102,名字属性' type="text">
<input value='定位' type="button" onclick=flytomaker()>
</div><!--该工具条div不能包在mapdiv里面,否则工具条按钮点击事件会传给map导致popup关闭-->
<script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
<script type="text/javascript">
var map, url = "http://182.247.253.93:8090/iserver/services/map-world/rest/maps/World";
map = L.map('map', {
crs: L.CRS.EPSG4326,
center: [0, 0],
maxZoom: 18,
zoom: 1
});
L.supermap.tiledMapLayer(url).addTo(map);
//往 Capitals 数据集中添加要素
function addpoint() {
var commit = getcommit();
var uri = "http://localhost:8090/iserver/services/data-editer/rest/data/datasources/name/localhost:5432_AAA/datasets/name/dataset_capitals_p/features.rjson";
//欲增加的要素信息。
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
//如果增加的是多个点,则entity为[[NewFeature1],[NewFeature]],url还需要添加其他参数,参见features的POST请求
var NewFeature = {
// "ID": 5000,
"fieldNames": [
// "SMID",
"SMX",
"SMY",
// "SMLIBTILEID",
"SMUSERID",
"CAPITAL",
"COUNTRY",
"CAP_POP"
],
"fieldValues": [
// "5000",
"100.56",
"100.55",
// "5001",
"5014",
"示例首都",
"示例国家",
"582000.0"
],
"geometry": {
// "id": 5000,
"parts": null,
"points": [{
"x": 102.56,
"y": 24.55
}],
"style": null,
"type": "POINT"
}
}
//欲增加的要素信息集合(包含1个要素)
var entity = [NewFeature];
commit.open("POST", encodeURI(uri) + "?returnContent=true", false, "", "");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(entity));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
//提示结果
if (response.length > 0) {
alert("创建要素成功,添加的要素资源的 ID 为:" + response[0])
} else {
alert("创建要素失败")
}
}
function getline() {
var commit = getcommit();
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features.rjson";
//欲增加的要素信息。线或面。
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
var NewFeature = {
// "ID": 5000,
"fieldNames": [
"SMUSERID"
],
"fieldValues": [
"5014"
],
"geometry": {
// "id": 5000,
"parts": null,
"points": [
{"x": 0, "y": 0},
{"x": 0, "y": 20},
{"x": 40, "y": 55},
{"x": 120, "y": 60}
],
"style": null,
"type": "LINE"
}
}
//欲增加的要素信息集合(包含1个要素)
// var entity = [NewFeature];
commit.open("GET", encodeURI(uri) + "?returnContent=true", false, "", "");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
// commit.send(toJSON(entity));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
// var response = json_parse(commit.responseText, null);
console.log(commit.responseText);
//提示结果
// if (response.length > 0) {
// alert("创建要素成功,添加的要素资源的 ID 为:" + response[0])
// } else {
// alert("创建要素失败")
// }
}
function addline() {
var commit = getcommit();
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features.rjson";
//欲增加的要素信息。线或面。
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
var NewFeature = {
// "ID": 5000,
"fieldNames": [
"SMUSERID"
],
"fieldValues": [
"5014"
],
"geometry": {
// "id": 5000,
"parts": null,
"points": [
{"x": 0, "y": 0},
{"x": 0, "y": 20},
{"x": 40, "y": 55},
{"x": 120, "y": 60}
],
"style": null,
"type": "LINE"
}
}
//欲增加的要素信息集合(包含1个要素)
var entity = [NewFeature];
commit.open("POST", encodeURI(uri) + "?returnContent=true", false, "", "");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(entity));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
console.log(response);
//提示结果
if (response.length > 0) {
alert("创建要素成功,添加的要素资源的 ID 为:" + response[0])
} else {
alert("创建要素失败")
}
}
//PUT更新多个要素
function updatelines() {
var commit = getcommit();
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features.rjson";
//欲增加的要素信息。线或面。
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
//修改必须传入ID,可不传入fieldNames或geometry
var NewFeature = {
"ID":2,
"fieldNames": [
"SMUSERID"
],
"fieldValues": [
"999"
]
// "geometry": {
// "id": 1,
// "parts": null,
// "points": [
// {"x": 0, "y": 0},
// {"x": 0, "y": 20},
// {"x": 40, "y": 55},
// {"x": 120, "y": 60}
// ],
// "style": null,
// "type": "LINE"
// }
}
//欲增加的要素信息集合(包含1个要素)
var entity = [NewFeature];//有多个要素需要更新的话都放到数组里
commit.open("POST", encodeURI(uri) + "?returnContent=true"+"&_method=PUT", false, "", "");//请求参数填在这里
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(entity));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
console.log(response);
//提示结果
if (!response.succeed) {
alert("更新失败")
} else {
alert("更新成功")
}
}
//更新单个要素。单个要素更新的请求体是json对象字符串,不是数组对象字符串
function updateline() {
var commit = getcommit();
//更新单条线地址有变
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features/";
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
//修改必须传入ID,可不传入fieldNames或geometry
var NewFeature = {
"ID":"64",//必须传该参数,而且必须和地址里的参数保持一致。
"fieldNames": [
"SMUSERID"
],
"fieldValues": [
"666666"
],
}
// var entity = [NewFeature];
commit.open("POST", encodeURI(uri) + "64.rjson?returnContent=true"+"&_method=PUT", false, "", "");//请求参数填在这里,包含ID号
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(NewFeature));
console.log(toJSON(NewFeature))
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
console.log(response);
//提示结果
if (!response.succeed) {
alert("更新失败")
} else {
alert("更新成功")
}
}
//删除线要素,uri需要包含删除操作、删除的SQL条件或IDs数组。可批量删除。
//IDS批量删除要素
function deletelineids() {
var commit = getcommit();
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features.rjson";
//欲增加的要素信息。线或面。
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
// var NewFeature = {}
//欲增加的要素信息集合(包含1个要素)
var entity = [43];//IDS请求体数组填在这里
commit.open("POST", encodeURI(uri) + "?_method=DELETE&deleteMode=IDS", false, "", "");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(entity));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
console.log(commit.responseText);
//提示结果
if (!response.succeed) {
alert("删除失败!或许不存在该要素!" )
} else {
alert("删除成功!")
}
}
//根据ID删除单个要素
function deletelineid() {
var commit = getcommit();
//地址结尾有变化
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features/";
//欲增加的要素信息。线或面。
//其中的 ID、SMID、geometry.id 一致,传入的值无效。SMLIBTILEID 的值是固定的,传入的值也无效。
// var NewFeature = {}
// var entity = [NewFeature];
commit.open("POST", encodeURI(uri) + "64.rjson?_method=DELETE", false, "", "");//地址结构里需要带ID.rjson
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send();//必须send,内容可以为空
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
console.log(commit.responseText);
//提示结果
if (!response.succeed) {
alert("删除失败!或许不存在该要素!" )
} else {
alert("删除成功!")
}
}
//SQL条件批量删除要素
function deletelinesql() {
var commit = getcommit();
var uri = "http://localhost:8090/iserver/services/data-editer-2/rest/data/datasources/name/localhost:5432_AAA/datasets/name/myline/features.rjson";
//删除条件,请求体。官网帮助文档对SQL表述有错,按照如下方式写。
var NewFeature = {"attributeFilter":"SmID < 100"}
// var entity = [{"attributeFilter":"SmID < 47"}];
commit.open("POST", encodeURI(uri) + "?_method=DELETE&deleteMode=SQL", false, "", "");
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
commit.send(toJSON(NewFeature));
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
console.log(commit.responseText);
//提示结果
if (!response.succeed) {
alert("删除失败")
} else {
alert("删除成功")
}
}
</script>
</body>
</html>