Клуб API Карт

Запрос на геокодирование криво работает опере?..

Пост в архиве.

 

<!DOCTYPE html>
<html>
<head>
<title>проверка</title>
<meta charset=utf-8>
<html lang=ru>
<script src="jquery-1.7.1.min.js"></script>
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=з_д_е_с_ь_м_о_й_к_л_ю_ч"></script>
<script>
function go() {
var res, rescont='Район остановки: ';
var lat=$("#ilat").val(
var lng=$("#ilng").val(
    $.ajax({type: "GET",
            url: "http://geocode-maps.yandex.ru/1.x/",
            data:'geocode='+lng+','+lat+'&format=json&kind=house&results=2&key=з_д_е_с_ь_м_о_й_к_л_ю_ч',
            dataType:"JSON", timeout:30000, async:false,
            error: function(xhr) {
                rescont+='Ошибка обратного геокодирования Яндекс: '+xhr.status+' '+xhr.statusText;
            },
            success: function(html) {
                res=html;
                var geores=res.response.GeoObjectCollection.featureMember;
                if(geores.length>0) {
                    for(k=0;k<geores.length;k++) {
                    //console.log('name=',geores[k].GeoObject.name);
                        rescont+=geores[k].GeoObject.name+'; ';
                    }
                } else {
                    rescont+='нет данных';
                }                                    
           }
   }
    $('#iout').text(rescont);

}
</script>
</head>
<body>

<div id="m1" style="position:absolute;top:0px;left:0px;width:400px;height:400px;border:2px solid black;background-color:silver;padding:5px;font:12pt sans-serif;">
    <div style="position:relative;width:100px;height:200px;border:1px solid black;float:left;">
        <p>Latitude: <input id="ilat" type="text" size="8">
        <p>Longitude: <input id="ilng" type="text" size="8">
        <button onclick="go();">Get data</button>
    </div>
    <div style="position:relative;width:250px;height:200px;border:1px dotted black;float:right;">
    </div>
    <textarea id="iout" rows="3" cols="15" wrap="soft"></textarea>
</div>
</body></html>

Приветствую.

Код такого вида исправно возвращает два адреса в Хроме и Фаирфоксе, в Опере же срабатывает ветка ошибки и выводится сообщение "Ошибка обратного геокодирования Яндекс: 0 No Transport".

Как этот эффект побороть в опере?..

3 комментария
Sergey Konstantinov
28 января 2016, 04:42

Попробуйте для начала убрать async: false

 

но оно же работает в других браузерах! тем более, мне нужен именно синхронный запос, поскольку полученный результат должен еще дополнительно обрабатываться. Для чистоты эксперимента попробовал - все одно опера дает ошибку.

Sergey Konstantinov
28 января 2016, 04:42

Синхронный кроссдоменный XMLHttpRequest невозможен. XMLHttpRequest может принимать данные только с того же домена, на котором размещён скрипт. Существует драфт кросдоменного xhr, какие-то браузеры его реализуют, какие-то - нет.

http://en.wikipedia.org/wiki/XmlHttpRequest#Cross-domain_requests