Исправлена ​​ошибка IE7 с предупреждением - Jquery.ajax - PullRequest
1 голос
/ 09 сентября 2011

У меня ошибка только в IE7, где когда я ставлю предупреждение в коде - проблема исправлена.Как указано здесь: /4971629/strannaya-problema-s-javascript-jquery-kotoraya-ispravlyaetsya-s-pomoschy-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);
    }
});

и в моем отображении функции карты я устанавливаю координаты на карте Google, чтобы обвести свойство так:

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 просто удаляетналожение у меня на карту Google.Это прекрасно работает в IE 8 и 9, FF и Chrome - но в IE7 я не получаю наброски настройки из вызова setUpProertyBorder.

Я «думал», что функция «success» в jQuery.ajaxвызывается только ПОСЛЕ того, как данные возвращены - таким образом, я думаю, что мои данные есть - но их нет в IE7.

Теперь, если я добавлю предупреждение в setUpProertyBorder - он неожиданно заработает в IE7 (???).?На что я ослеп?

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

У меня была похожая проблема, предполагалось, что создание карты слишком медленный процесс, и DOM не готов к новым обновлениям до этого момента (только для чтения):

coordOutline.setMap (карта);

, поэтому, если вы попытаетесь обновить DOM, произойдет сбой. решается установкой таймаута перед использованием функций карты, что-то вроде этого в вашем случае

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

возможно, это не лучший способ, но это сработало

0 голосов
/ 09 сентября 2011

Несмотря на то, что оператор успеха выполняется только при получении данных из запроса Ajax, это зависит от того, когда запрашивается фактический вызов Ajax.

Javascript, который выполняет Ajax-вызов, ожидает ли он загрузки документа до его запуска, то есть:

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

Вы также можете убедиться, что JavaScript загружен после загрузки страницы, используя команду defer:

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

Попробуй это и посмотри, исправит ли это. Дайте мне знать, если нет, и я еще посмотрю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...