Javascript ломается после оператора if - PullRequest
1 голос
/ 18 января 2011

Я не могу понять, почему все внутри функции request.onreadystate вплоть до комментария работает, а следующие alert () - нет. Сценарий, кажется, ломается после оператора if.

Я бы очень хотел, чтобы кто-то посмотрел на мой код для меня. Большое спасибо.

    function positionHandler(position) {
        if (!document.getElementById("span")) document.body.appendChild(document.createElement("span"));            
        document.getElementsByTagName("span")[0].innerHTML = "("+position.coords.latitude+","+position.coords.longitude+")";
        request = new XMLHttpRequest();
        request.asycnc = false;
        request.open('GET','get.php?latitude='+position.coords.latitude+'&longitude='+position.coords.longitude);
        request.onreadystatechange = function() {
            if (request.readyState != 4) return false;
            else if (request.readyState == 4 && request.status == 200) {
                var results = request.responseXML.getElementsByTagName('note');
                for (var i in results) {
                    if (!document.getElementById(results[i].getAttribute('id'))) {
                        var note = document.createElement('div');
                        note.innerHTML = results[i].childNodes[2].childNodes[0].nodeValue;
                        note.id = results[i].getAttribute('id');
                        document.getElementById('main').appendChild(note);
                        //everything up until this point works
                    }
                }
                alert("this doesn't work 1");
            }
            alert("this doesn't work 2");
        }
        request.send(null);
        alert("this does work!");
    }

    var position = navigator.geolocation.watchPosition(positionHandler);

Ответы [ 2 ]

0 голосов
/ 18 января 2011

Попробуйте изменить порядок ваших операторов.

function positionHandler(position) {
    if (!document.getElementById("span")) document.body.appendChild(document.createElement("span"));            
    document.getElementsByTagName("span")[0].innerHTML = "("+position.coords.latitude+","+position.coords.longitude+")";
    request = new XMLHttpRequest();
    request.asycnc = false;
    // set the eventhandler logic
    request.onreadystatechange = function() {
        if (request.readyState != 4) return false;
        else if (request.readyState == 4 && request.status == 200) {
            var results = request.responseXML.getElementsByTagName('note');
            for (var i in results) {
                if (!document.getElementById(results[i].getAttribute('id'))) {
                    var note = document.createElement('div');
                    note.innerHTML = results[i].childNodes[2].childNodes[0].nodeValue;
                    note.id = results[i].getAttribute('id');
                    document.getElementById('main').appendChild(note);
                    //everything up until this point works
                }
            }
            alert("this doesn't work 1");
        }
        alert("this doesn't work 2");
    }
    // the event will be triggered here
    request.open('GET','get.php?latitude='+position.coords.latitude+'&longitude='+position.coords.longitude);
    request.send(null);
    alert("this does work!");
}

var position = navigator.geolocation.watchPosition(positionHandler);

Причина в том, что вы устанавливаете обработчик после того, как он уже был вызван оператором request.open(...).

Надеюсь, что этопомогает.

0 голосов
/ 18 января 2011

Эта строка -> оповещение («это не работает 1»);не будет работать, потому что, вероятно, цикл бесконечен.Эта строка -> оповещение («это не работает 2»);будет работать, только если это условие else if (request.readyState == 4 && request.status == 200) ложно.

Третье предупреждение должно работать, если вы исправите первую проблему предупреждения.Пожалуйста, проверьте ваш цикл.

Best,

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