在if语句后断开Javascript

在if语句后断开Javascript,javascript,ajax,Javascript,Ajax,我不明白为什么request.onreadystate函数中的所有内容直到注释都起作用,但下面的警报却不起作用。脚本似乎在if语句之后中断 我真的很感激有人帮我看我的代码。非常感谢 function positionHandler(position) { if (!document.getElementById("span")) document.body.appendChild(document.createElement("span"));

我不明白为什么request.onreadystate函数中的所有内容直到注释都起作用,但下面的警报却不起作用。脚本似乎在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);

这行->警报这不起作用1;不起作用,因为循环可能是无限的。 这行->警报这不起作用2;只有当request.readyState==4&&request.status==200为false时,此条件才起作用

如果修复了第一个警报问题,则第三个警报应该可以工作。请检查你的线圈


最好的做法是,尝试更改语句的顺序

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);
原因是您在请求调用处理程序后设置该处理程序。打开。。。声明


希望这能有所帮助。

错误日志中有任何可见的信息吗?请尝试放置其他警报,例如,在您写评论的地方以及if语句之后。此外,Firebug将帮助您创建控制台选项卡。您是否收到任何特定错误?因为结果中的var i不安全,您可能会迭代在原型链上定义的继承属性,并且您在循环中的代码可能会在到达循环末尾之前在此类属性上中断。您不会看到错误,因为异步应答中的失败不会被报告。尝试添加一个Try/catch,然后使用计数器进行迭代或添加一个结果为的检查。hasOwnPropertyi。我正在iphone上测试代码,因为桌面浏览器在地理位置上似乎不可靠,所以我无法访问控制台。谢谢你的帮助,但彼得斯的回答很完美。我想你误解了密码。对于var i,结果将通过有限数量的项进行枚举。因此,第一个警报应该触发。第二个警报不受else if语句的控制,因此无论如何都应该触发。我的意思是你可以这样做。结果:每个函数i,v{};