开发了一个网站,查询一些空间对象,要连接到GIS系统,通过Keyid传过去,让对象现显示出来。以前是直接在TaskPanel中写的。存在父子关系好实现,现在要想让地图显示后立即放大到所选的对象。存在一个事件先后顺序。如果把查找和选中的函数放在page_Load里是不行的。因为地图还没加载完成是不能调用地图资源的,同时也不能使用viewer API。后来搜索了下发现了一篇文章。
http://trac.osgeo.org/mapguide/wiki/CodeSamples/JavaScript/AJAXViewerEventHooking
然后在通过AJAX解决了这个问题;一下为我的代码:
<script type="text/javascript"> // 本程序已通过调试
//创建ajax的处理
//#region
var xmlHttp;
function createXmlHttpRequest() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
if (xmlHttp.overrideMimeType) {
xmlHttp.overrideMimeType("text/xml");
}
}
else if (window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (!xmlHttp) {
window.alert("你的浏览器不支持创建XMLhttpRequest对象");
}
return xmlHttp;
}
//创建CheckSelect
function CheckSelect() {
createXmlHttpRequest();
var url = "highlighthandle.ashx";
xmlHttp.open("post", url, true);
xmlHttp.onreadystatechange = CheckSelectResult;
xmlHttp.send(null);
}
//创建用户检测的回调函数
function CheckSelectResult() {
if (xmlHttp.readyState == 4)//服务器响应状态
{
if (xmlHttp.status == 200)//代码执行状态
{
if (xmlHttp.responseText == "true") {
alert("handle 处理错误")
}
else {
document.ViewerFrame.mapFrame.SetSelectionXML(xmlHttp.responseText);
document.ViewerFrame.mapFrame.ExecuteMapAction(10);
}
}
}
}
//#endregion
//当map加载完成后,处理选择的对象,【否则会报错】,激发ajax的处理
//#region
function OnMapInitialized() {//当map加载完成后出发的操作
CheckSelect();
}
window.onload = function() {
//设置timer
var timer;
var watch = function() {
try {
var mapFrame = document.ViewerFrame.mapFrame;
if (mapFrame.mapInit) {
// 取消循环
clearInterval(timer);
// Call our custom handler
OnMapInitialized();
}
}
catch (e) {
}
};
timer = setInterval(watch, 200);
};
//#endregion