关于超图WMS服务中getCapabilities的问题

本人在做WMS服务聚合的时候,遇到了一个问题,整个过程是这样的:

1.先利用ArcServer发布了一个地图的WMS服务,

2.然后利用超图提供的 客户端聚合范例-WMS 这个DEMO,把ArcGIS的WMS地址输入到地址中,

3.然后点击下一步,在显示图层名字中,中文名字的图层都出现了乱码现象。

查看了一下相关的页面代码和js,最后发现了估计是超图提供的js方法中的SuperMap.Utility.getXmlHttpRequest();有问题。

超图提供的源代码如下:

/**

 * 获取元数据信息

 */

function getCapabilities(){

	hideElement("divWMSLayerSettings");

	var url = document.getElementById("txtWMSAddress").value;

	var msg = "正在获取元数据信息";

	msg += url;

	document.getElementById("divMsg").innerHTML = msg ;

	showElement("divMsg");

	var url = document.getElementById("txtWMSAddress").value;

	 if( url && url.trim() != "" ) {

	 	if(url.indexOf("?") != -1 ){

	 		url += "&";

	 	}else{

	 		url += "?";

	 	}

	 	url += "SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities";

	 	//获取服务的元数据

	 	var xhr = SuperMap.Utility.getXmlHttpRequest();

	 	url = getContextPath() + "ajaxhandler?url=" + escape(url);

	 	xhr.open("GET", url, true);

	 	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=gb2312");

	 	var handler = onGetCapabilitiesComplete;

	 	var errorHandler = onGetCapabilitiesError;

   		xhr.onreadystatechange = function () {

   			if(xhr.readyState==4){

				if(xhr.status==200){

					var xmldoc;

					if (window.ActiveXObject) {

						xmldoc = new ActiveXObject("microsoft.XMLDOM");

					} else if (document.implementation&&document.implementation.createDocument) {

						xmldoc = document.implementation.createDocument("","doc",null);

					}

					xmldoc.async = false;

					if(window.ActiveXObject) {

						xmldoc.loadXML(xhr.responseText);

					} else {

						var parser = new DOMParser();

			               xmldoc = parser.parseFromString(xhr.responseText, "text/xml");

					}

					

					handler(xhr.responseText);

				}else{

					errorHandler();

				}

			}

   		}

   		xhr.send(null);	

	 }else{

	 	alert("WMS服务地址不能为空");

	 	onPre();

	 }

};

 后来,我自己添加了一个getXMLHttpRequest的方法,如下

function getXMLHttpRequest(){

    var xhr = false;   

    if(window.XMLHttpRequest){

        xhr = new XMLHttpRequest();

    }

    if(window.ActiveXObject){

        xhr = new ActiveXObject("Microsoft.XMLHTTP");

    }   

    return xhr;

}

然后把原来代码中,第20行的:var xhr = SuperMap.Utility.getXmlHttpRequest();  改为  var xhr = getXMLHttpRequest();
发现遇到是中文名字的图层就不会乱码了。如果大家也遇到类似的问题,不妨像我这样做,试试看哦!

 

你可能感兴趣的:(get)