Передача элемента в XMLHttpRequest одной функции, но вторая также знает, почему? - PullRequest
0 голосов
/ 18 июня 2010

Я работаю над приложением jsp / servlet / ajax. Я использую XMLHttpRequest для передачи значений со страницы jsp сервлету, который извлекает данные из базы данных и возвращает XML в jsp.

Код работает, но есть одна вещь, которую я не понимаю. Вот часть JSP

  <body>
     <label>Longitude</label><input type="text" id ="lat" value="40.799559" />
    <br />
    <label>Latitude</label><input type="text" id="lon" value="-74.481386" />
    <br />
    <br />
    <input type="button" onclick="checkGPSCoords(document)" value="Test" />
    <br/><br/>
    <input type="text" id ="dbCounty" readonly/>
    <br/>
    <input type="text" id ="dbMuni" readonly />
    <br/>
    <br />
   </body>

Я передаю элемент документа в JavaScript Вот скрипт:

<script type="text/javascript" language="JavaScript">
        var req;
        var isIE;
        function initRequest(){
            if (window.XMLHttpRequest) {
                req = new XMLHttpRequest();
            } else if (window.ActiveXObject) {
                isIE = true;
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }

        function checkGPSCoords(currentWindow){
            var lat= currentWindow.getElementById("lat").value;
            var lon = document.getElementById("lon").value;
            //alert("lon:" + lon);
            initRequest();
            req.open("GET","./lonlat?lat="+ lat + "&lon=" + lon);
            req.onreadystatechange = retrieveMuniCntyNames;
            req.send(null);
        }

        function retrieveMuniCntyNames()
        {
           var muniAndCnty;

           if (req.readyState==4)
           {
               if(req.status==200)
               {
              var XMLresult = req.responseXML;
               muniAndCnty = XMLresult.getElementsByTagName("rec");

              //incoming from Servlet  <twp><rec twp='Morristown town' cnty='Morris' /></twp>
              var c = document.getElementById("dbCounty");
              var t = document.getElementById("dbMuni")
              c.setAttribute("value",muniAndCnty[0].getAttribute("cnty") )
              t.setAttribute("value",muniAndCnty[0].getAttribute("municipality") )                        
              }  }}</script>

Функция checkGPSCoords знает имя документа (которое является моим именем файла jsp). Что меня удивляет, так это то, что функция обратного вызова retrieveMuniCntyNames () также знает имя документа, поскольку безошибочно устанавливает атрибуты для элементов ввода в jsp. Я проверил это клопом.

Буду признателен за любые мысли по этому вопросу. Спасибо, Chris

1 Ответ

1 голос
/ 18 июня 2010

Я не уверен, какую настройку вы пытаетесь передать здесь, или где в коде должен быть javascript. Здесь я предполагаю, что вы определили сценарий на той же странице или включаете его из внешнего файла.

Тем не менее, когда исполняется javascript, браузер не покидает страницу. Следовательно, документ не меняется. Из предоставленного вами кода вы не пытаетесь открыть новое окно или уйти со страницы. Поэтому переменная документа не изменилась от одного вызова функции к другому, даже после успешного вызова AJAX. Это один и тот же документ до, во время и после вызова AJAX.

С помощью того же токена вы, вероятно, можете исключить параметр currentWindow из функции checkGPSCoords. Вы на самом деле не проверяете объект окна, так как передаете объект документа в функцию. Кроме того, объект окна не имеет метода getElementById.

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