使用异步URL请求更新openlayers弹出窗口

时间:2012-08-23 16:42:52

标签: javascript xmlhttprequest openlayers

我的mapsApp使用openLayers弹出窗口显示地图上的标记。当我创建弹出窗口时,我使用链接和CSS微调器预填充它。然后我启动异步URL请求。

我想要做的是然后删除微调器,然后添加我从URL请求收到的信息。我无法弄清楚如何引用弹出窗口的html部分(finalString)。

这是我的代码。

function showPopUp (markerID,itemID) {

// **Tested** this creates a spinner and works with CSS

wxString =   "<div class=\"spinner\" style=\"width: 34px; height: 34px\"><div class=\"bar1\"></div><div class=\"bar2\"></div><div class=\"bar3\"></div><div class=\"bar4\"></div><div class=\"bar5\"></div><div class=\"bar6\"></div><div class=\"bar7\"></div><div class=\"bar8\"></div><div class=\"bar9\"></div><div class=\"bar10\"></div><div class=\"bar11\"></div><div class=\"bar12\"></div></div>";
}

var markerString =   "<a title=\""+itemID+"\" href=\"http://www.mywebsite.com/item/"+itemID+"\" target=\"_blank\">"+itemID+"</a>";
var finalString = markerString + "</br>"+ wxString;

popup = new OpenLayers.Popup.FramedCloud(icaoID,
                     markerID.lonlat,
                     new OpenLayers.Size(200, 200),
                     finalString,
                     null, true);

map.addPopup(popup);
getWX(itemID,popup);        //asynch request that will remove the popup
}

我的getWx函数使用XMLhttp请求

function getWX (item) {

if (window.XMLHttpRequest) {    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {                          // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function() {

    if (xmlhttp.readyState==4 && xmlhttp.status==200) {     //If finished loading

        return xmlhttp.responseText; 
    }
}

xmlhttp.open("GET","getwx.php?q=" + item,true);
xmlhttp.send();

}

1 个答案:

答案 0 :(得分:1)

我可以帮助您完成第一步 - 访问弹出对象。但是,一旦调用构造函数,我就没有找到如何更改文本。

修改 Popup对象具有setContentHTML函数,该函数将由FramedCloud类继承。)

您正在使用两个参数调用getWX函数,但您只接受一个参数。首先将弹出对象添加到以下内容:

function getWX (item, popup)

然后当调用就绪(readyState == 4)时,更改弹出文本:

if (xmlhttp.readyState==4 && xmlhttp.status==200) {     //If finished loading

    popup.setContentHTML(xmlhttp.responseText); 
}

如果您在创建弹出窗口之前等待文本,可能会更容易?

那就是这样的:

传递对地图对象的引用:

function getWX (item, map)

文本准备就绪时创建弹出窗口:

if (xmlhttp.readyState==4 && xmlhttp.status==200) {     //If finished loading
     popup = new OpenLayers.Popup.FramedCloud(icaoID,
                 markerID.lonlat,
                 new OpenLayers.Size(200, 200),
                 finalString,
                 null, true);

    map.addPopup(popup);
}