刚开始接触ArcGIS for javascript。 根据 ArcGIS rest API 编辑图形并保存到服务端,但是一直添加失败,返回错误信息为:Unable to complete operation. Parser error: Some parameters could not berecognized。
我的数据格式为:
[{"geometry": {"x":117.87768878353297,"y":38.05192664561836},"attributes" : {"GIS_RESMAP_ID":222222,"OBJECT_LABEL":"yuyuyu"}}]
是一个标准的json格式串,调用 ArcGIS rest server http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0/addFeatures
测试添加时也能正常添加。
但是在我自己写的ajax通讯时添加失败。我的通讯部分代码是:
var restURL="http://14.49.20.16:8080/arcgis/rest/services/sd.ziyuan/SDZYGL/FeatureServer/0/addFeatures";//构建的REST URL
request.open("POST",restURL,true);//请求对象初始化连接
request.onreadystatechange=processResponse;//设置服务器响应请求后的回调函数
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(graphicStr);//发送数据
路径没错,数据格式没做,就是添加不成功,搞的我很郁闷,我怀疑是数据传递是出现了问题或者是还缺少什么设置,服务端一般不会出什么问题,所以问题应该还是在我这边。经过几次测试,我发现一个问题,用自己程序添加时传递的数据与用服务自带页面添加时传递数据格式不一样。下面为google chrome 截图:
我看了一下API,gdbVersion :server端数据库版本,roobackOnfailure:添加失败是否回滚。
f:pjson:应该是数据格式要求。 但是问题是这个f:pjson应该添加在什么位置,如何添加?
结合了国外的一片文章:http://gis.stackexchange.com/questions/34735/invalid-parameters-on-arcgis-rest-api-used-from-silverlight 关键部分截图:
我将我的数据json数据格式改成他的格式。结果添加成功!
我擦! 不知道是我打开的方式不对还是我和我小伙伴没找仔细,但是在官网上确实没找到在哪里设置这个东西!!
不管怎样, 问题总算是决绝了。 至于是不是标准写法或者是合不合规范我也不知道。
特意回来总结记录一下,共需要的朋友参考。如果哪位高手愿意指点,在下不甚感激........
*********************** ajax 原始写法**************************
var request=null;
//根据不同浏览器创建请求对象
function createRequest()
{
try{
request=new XMLHttpRequest();
}
catch(trymicrosoft)
{
try{
request = new ActiveXObject("Msxm12.XMLHTTP");
}
catch(othermicrosoft)
{
try{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(faild)
{
request=null;
}
}
}
if(request==null)
alert("创建request对象失败");
}
// 与 ArcGIS rest server 通讯
function sendRESTrequest(evt)
{
createRequest();
var restURL="http://10.249.20.216:6080/arcgis/rest/services/sd.ziyuan/SDZYGL/FeatureServer/0/addFeatures";//构建的REST URL
request.open("POST",restURL,true);//请求对象初始化连接
request.onreadystatechange=processResponse;//设置服务器响应请求后的回调函数
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(graphicStr);
}
function processResponse()
{
if(request.readyState==4)//就绪状态(ready state)有4个值“1:连接刚被初始化;
{ //2:正在处理请求;3:服务器快要完成请求;4:请求完成,浏览器得到响应”
//返回的是一个文本,需要用eval函数转成json对象
var testdiv = document.getElementById("addinfo");
testdiv.innerHTML=request.responseText;
alert(request.responseText);
}
}
可以直接使用的!