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

Javascript IE7错误修复w/alert-Jquery.ajax,javascript,jquery,internet-explorer-7,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

我只有在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;
}
函数显示映射(数据){
var defaultMapZoom=data.Outline.ZoomLevel;
var centerCoordinate=new google.maps.LatLng(data.Outline.lation,data.Outline.Longitude);
变量myOptions={
缩放:默认地图缩放,
中心:中心坐标,
mapTypeId:google.maps.mapTypeId.HYBRID,
滚轮:错误
};
map=new google.maps.map(document.getElementById('googleMap'),myOptions);
var mylistener=google.maps.event.addListener(映射'tilesloaded',函数(){
google.maps.event.removeListener(mylistener);
设置超时(启用搜索,500);
}); 
setUpProertyBorder(数据、轮廓、坐标);
}
函数设置ProertyOrder(坐标){
var coordsLatLon=createGoogleMapCoordinarray(坐标);
var coordOutline=new google.maps.Polygon({
路径:coordsLatLon,
strokeColor:“#ff0000”,
笔划不透明度:1.0,
冲程重量:2,
填充不透明度:0
});
coordOutline.setMap(map);
}
函数createGoogleMapCoordinatorRay(c){
var-coords=[];
对于(变量x=0;x
EnableSearch功能只是删除了我在google地图上的覆盖。 这在IE8&9、FF&Chrome中非常有效,但在IE7中,我无法通过调用SetupProertyOrder获得大纲设置

我“认为”jQuery.ajax中的“success”函数只有在返回数据后才被调用——因此我的想法是我的数据在那里——但它不在IE7中


现在,如果我在setUpProertyBorder中放置一个警报,它会突然在IE7(???)建议中工作吗?我对什么一无所知?

即使只有在从Ajax请求获取数据时才运行success语句,但这取决于请求实际Ajax调用的时间

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

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

$(文档).ready(函数(){
//你的代码在这里。。。
});
您还可以使用defer命令确保在加载页面后加载JavaScript:

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

$(文档).ready(函数(){
//你的代码在这里。。。
});

试试看,看能不能解决这个问题。如果没有,请告诉我,我将进一步查看。

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

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

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

$(文档).ready(函数(){
//你的代码在这里。。。
});
您还可以使用defer命令确保在加载页面后加载JavaScript:

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

$(文档).ready(函数(){
//你的代码在这里。。。
});

试试看,看能不能解决这个问题。如果没有,请告诉我,我将进一步查看。

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

coordOutline.setMap(map)

因此,如果您尝试更新DOM,它将导致失败。 通过在使用映射函数之前设置超时来解决此问题,smth在您的示例中是这样的

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


可能这不是最好的方法,但它起作用了

我也遇到过类似的问题,假设实例化地图的过程太慢,DOM目前还没有准备好进行新的更新(只读):

coordOutline.setMap(map)

因此,如果您尝试更新DOM,它将导致失败。 通过在使用映射函数之前设置超时来解决此问题,smth在您的示例中是这样的

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


可能这不是最好的方法,但它起作用了

您将警报按SetupPropertyOrder放置在哪里?将多边形添加到地图之前或之后?将警报按SetupPropertyOrder放置在何处?在你把多边形添加到地图之前还是之后?是的,谢谢。我想我试过这样做,但一定是做错了什么。非常感谢!就这样德米特里-谢谢-我以为我试过这样的事情,但一定是做错了什么。非常感谢!谢谢Adam-但是在代码中我没有显示我正在调用jquery(document).ready(function(){})中的ajax;谢谢Adam-但是在代码中我没有显示我正在调用jquery(document).ready(function(){})中的ajax;