首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用alert - Jquery.ajax修复了IE7错误

使用alert - Jquery.ajax修复了IE7错误
EN

Stack Overflow用户
提问于 2011-09-09 23:45:05
回答 2查看 583关注 0票数 1

我只在IE7中有一个错误,当我在代码中放置一个警报时,问题就被修复了。正如这里所说的:http://stackoverflow.com/questions/7220603/weird-problem-with-javascript-jquery-which-get-fixed-using-alert很可能会在异步调用中计时。

问题是我正在使用jQuery.ajax调用,并成功调用了一个函数-我认为它是在数据返回后调用的……

代码语言:javascript
复制
$.ajax({
    type: "POST",
    url: 'myurl.aspx/myMethod',
    data: "{ id: 3 }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        DisplayMap(msg.d);
    }
});

在我的display Map函数中,我在google地图上设置坐标来勾勒一个属性,如下所示:

代码语言:javascript
复制
function DisplayMap(data) {
    var defaultMapZoom = data.Outline.ZoomLevel;
    var centerCoordinate = new google.maps.LatLng(data.Outline.Latitude, data.Outline.Longitude);
    var myOptions = {
        zoom: defaultMapZoom,
        center: centerCoordinate,
        mapTypeId: google.maps.MapTypeId.HYBRID,
        scrollwheel: false
    };
    map = new google.maps.Map(document.getElementById('googleMap'), myOptions);
    var mylistener = google.maps.event.addListener(map, 'tilesloaded', function() {
        google.maps.event.removeListener(mylistener);
        setTimeout(EnableSearch, 500);
    }); 
    setUpProertyBorder(data.Outline.Coordinates);        
}
function setUpProertyBorder(coordinates) {
    var coordsLatLon = createGoogleMapCoordinateArray(coordinates);
    var coordOutline = new google.maps.Polygon({
        path: coordsLatLon,
        strokeColor: '#ff0000',
        strokeOpacity: 1.0,
        strokeWeight: 2,
        fillOpacity: 0
    });
    coordOutline.setMap(map);
}

function createGoogleMapCoordinateArray(c) {
    var coords = [];
    for (var x = 0; x < c.length; x++) {
        coords.push(new google.maps.LatLng(c[x].Latitude, c[x].Longitude));
    }
    return coords;
}

EnableSearch函数简单地删除了我在谷歌地图上的覆盖。这在IE8& 9、FF和Chrome中工作得很好--但是在IE7中,我不能通过调用setUpProertyBorder来获得轮廓设置。

我“认为”只有在返回数据之后才会调用jQuery.ajax中的“成功”函数-因此我的想法是我的数据在那里-但它不在IE7中。

现在,如果我在setUpProertyBorder中放置一个警报-它突然在IE7中工作(?)有什么建议吗?我被蒙蔽了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-10 00:05:45

我也遇到过类似的问题,假设实例化map的过程太慢,DOM直到现在才准备好进行新的更新(只读):

coordOutline.setMap(map);

因此,如果您尝试更新DOM,它将导致失败。通过在使用map函数之前设置超时来解决,在您的示例中,smth如下所示

setTimeout(function(){setUpProertyBorder(data.Outline.Coordinates);},200);

这可能不是最好的方法,但它奏效了

票数 1
EN

Stack Overflow用户

发布于 2011-09-10 00:00:51

尽管只在从Ajax请求获取数据时才运行成功语句,但这取决于请求实际的Ajax调用的时间。

执行Ajax调用的Javascript在运行之前是否等待文档加载,即:

代码语言:javascript
复制
<script type="text/javascript">
    $(document).ready(function() {
        // Your code here...
    });
</script>

您还可以使用defer命令确保在加载页面后加载JavaScript:

代码语言:javascript
复制
<script type="text/javascript" defer="defer">
    $(document).ready(function() {
        // Your code here...
    });
</script>

试试这个,看看能不能解决这个问题。如果没有,请让我知道,我会进一步研究。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7364185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档