Javascript 使用异步URL请求更新开放层弹出窗口

Javascript 使用异步URL请求更新开放层弹出窗口,javascript,xmlhttprequest,openlayers,Javascript,Xmlhttprequest,Openlayers,My mapsApp使用openLayers弹出窗口在地图上进行标记。当我创建弹出窗口时,我用链接和CSS微调器预先填充它。然后启动一个异步URL请求 我想做的是删除微调器,然后添加从URL请求返回的信息。我不知道如何引用弹出窗口(finalString)的html部分 这是我的密码 function showPopUp (markerID,itemID) { // **Tested** this creates a spinner and works with CSS wxString =

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

我想做的是删除微调器,然后添加从URL请求返回的信息。我不知道如何引用弹出窗口(finalString)的html部分

这是我的密码

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
}

我可以帮助您完成第一步-访问弹出对象。但是我还没有发现在你调用构造函数后如何更改文本

编辑 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, popup)
传入对贴图对象的引用:

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);
}

我可以帮助您完成第一步-访问弹出对象。但是我还没有发现在你调用构造函数后如何更改文本

编辑 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, popup)
传入对贴图对象的引用:

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);
}

谢谢,我错过了缺少的参数,我将使用它来引用弹出窗口。我不想延迟弹出窗口的创建,因为我希望用户能够使用链接,如果他们想等待getWX函数,他们可以。如果我希望用户等待,这是一个很好的答案。如果我没有得到我想要的其他答案,我会将其标记为答案并投票。@MB。我找到了如何设置文本的方法:在FramedCloud继承的Popup对象上设置方法
setContentHTML
。将编辑我的答案。很高兴能够提供帮助:-)谢谢,我错过了缺少的参数。我将使用该参数引用弹出窗口。我不想延迟弹出窗口的创建,因为我希望用户能够使用链接,如果他们想等待getWX函数,他们可以。如果我希望用户等待,这是一个很好的答案。如果我没有得到我想要的其他答案,我会将其标记为答案并投票。@MB。我找到了如何设置文本的方法:在FramedCloud继承的Popup对象上设置方法
setContentHTML
。将编辑我的答案。很高兴能够提供帮助:-)我找到了更好的答案,请参阅我的编辑我找到了更好的答案,请参阅我的编辑