Javascript AJAX при отправке - PullRequest
       2

Javascript AJAX при отправке

0 голосов
/ 01 декабря 2011

Я использую API карты Google, чтобы получить местоположение. Я использовал ниже функцию замены поля адреса. он работает правильно на обмене. Я использовал ту же функцию при отправке в той же форме, чтобы проверить функцию еще раз при отправке с использованием атрибута onsubmit. но при отправке я не могу получить ответ от этого ajax из-за того, что возврат с использованием этого возврата true отправляет форму с полученным ответом.

пожалуйста, кто-нибудь найдет решение для этого

function validatePlaceForm(){

            var frm = document.frmOncampus;     

            var oncampusAddress = frm.oncampusAddress.value;

            var xmlhttp;
            if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
            }else{// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function(){

            if (xmlhttp.readyState==4 && xmlhttp.status==200){
            //document.getElementById("my_div").innerHTML=''
            var result =xmlhttp.responseText;
                //alert(result);
                var both  =result.split("|");
                    frm.oncampusLatitude.value=both[0];
                    frm.oncampusLongtitude.value=both[1];
            }
          }
            var url='latlog.php?address='+oncampusAddress;

            xmlhttp.open("GET",url,true);
            xmlhttp.send();

            return true;

        }

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Проверьте ответ от AJAX.Если ответ пуст, верните false, в противном случае верните true.

0 голосов
/ 01 декабря 2011

К сожалению, это никогда не сработает, потому что способ использования XHR там асинхронный:

xmlhttp.open("GET",url,true); // true means asynchronous

Поскольку вызов асинхронный, результат функции не будет иметь результата при запуске Ajaxrequest.

Если вы хотите продолжить использование этой функции, просто измените этот последний параметр на false, то есть

xmlhttp.open("GET", url, false); // will now be synchronous

Теперь вам также не понадобится обработчик onreadystatechange.Имейте в виду, что это, очевидно, сделает синхронный вызов XHR и для вашего события onchange;возможно, настройте функцию так, чтобы она принимала флаг для is_synchronous или для чего-то другого.

Возможно, вы также захотите добавить метку времени в свои запросы, чтобы браузер не кэшировал ответ.

0 голосов
/ 01 декабря 2011

Измените возвращаемое значение с true на false и вызовите эту функцию следующим образом: onsubmit="return validatePlaceForm();"

Это должно сработать.

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