IE7错误修复w / alert - Jquery.ajax

时间:2011-09-09 15:45:05

标签: javascript jquery internet-explorer-7

我只在IE7中出现错误,当我在代码中发出警报时 - 问题得到解决。如上所述:http://stackoverflow.com/questions/7220603/weird-problem-with-javascript-jquery-which-get-fixed-using-alert 它可能会在异步调用中进行计时。

我正在使用jQuery.ajax调用并成功调用函数 - 我认为在返回数据后会调用它...

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

在我的显示地图功能中,我在谷歌地图上设置坐标,勾勒出如下属性:

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功能只是移除了我在谷歌地图上的叠加层。 这在IE 8&amp; 9,FF&amp; Chrome - 但在IE7中我没有通过调用setUpProertyBorder获得大纲设置。

我“认为”jQuery.ajax中的“成功”函数仅在返回数据后被调用 - 因此我的想法是我的数据存在 - 但它不在IE7中。

现在,如果我在setUpProertyBorder中发出警报 - 它突然在IE7中工作(???)建议?我不知道的是什么?

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,假设实例化地图的过程太慢而且DOM还没准备好进行新的更新,直到这一刻(只读):

  

coordOutline.setMap(地图);

因此,如果您尝试更新DOM,则会导致失败。 通过在使用map函数之前设置超时来解决,在你的情况下像这样smth

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

可能它不是最好的方式,但它起作用

答案 1 :(得分:0)

即使成功语句仅在获取来自Ajax请求的数据时运行,它取决于请求实际的Ajax调用。

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

<script type="text/javascript">
    $(document).ready(function() {
        // Your code here...
    });
</script>

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

<script type="text/javascript" defer="defer">
    $(document).ready(function() {
        // Your code here...
    });
</script>

试一试,看看是否能修复它。如果没有,请告诉我,我会进一步了解。