【发布时间】:2015-07-11 11:53:41
【问题描述】:
我的问题是 pointOnMap() 在 xmlPreparer() 之前运行,尽管已订购。 我认为这与使用 AJAX 有关。 parseXML 创建我需要的对象。 所以当我使用 pointOnMap() 时,它应该已经被初始化了。
页面上首先是我从 pointOnMap - 0 看到的,然后是从 parse 看到的 ..所以它的顺序不正确。
谢谢你的建议。
var mesta= new Array();
function init() {
xmlPreparer();
pointOnMap();
}
//add source
function xmlPreparer() {
$.ajax({
type: "GET",
url: "./mesta.xml",
dataType: "xml",
success: parseXml
});
}
function parseXml(xml) {
var type;
var name;
var latitude;
var longitude;
$(xml).find("city").each(function()
{
type=$(this).find("type").text();
name=$(this).find("name").text();
latitude= $(this).find("latitude").text();
longitude=$(this).find("longitude").text();
var mesto = {type:type, name:name, latitude:latitude, longtitude:longitude};
mesta.push(mesto);
});
alert(mesta.length);//this prints right size
}
//add source
function pointOnMap() {
alert(mesta.length);//for no reason prints 0 and runs before xmlparser?
$('#dot').css('top', YLatToPixel(0,$('#jpMapa')))
$('#dot').css('left', XLngToPixel(0,$('#jpMapa'))+'px');
}
function YLatToPixel(lat,elem){
var containerHeight=$(elem).height();
lat+=90;
var calculatedHeight=((lat*containerHeight)/180);
return $(elem).offset().top+($(elem).height()-calculatedHeight);
}
function XLngToPixel(lng,elem){
var containerWidth=($(elem).width());
lng=lng+180;
return $(elem).offset().left+((lng*containerWidth)/360);
}
【问题讨论】:
-
@Ed Cottrell:您是否看过关于“重复”的公认答案...使用
async: false! Argggh ...该答案应该被删除,并且永远不要用作重复! :)
标签: javascript jquery ajax