Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2019, 09:09
Аспирант
Отправить личное сообщение для izumov Посмотреть профиль Найти все сообщения от izumov
 
Регистрация: 05.05.2019
Сообщений: 72

Почему разные браузеры по-разному обрабатывают код?
Код создания запроса у меня реализован в виде функции
function createRequest() {
     try {
       request = new XMLHttpRequest();
     } catch (trymicrosoft) {
       try {
         request = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (othermicrosoft) {
         try { 
		 
           request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (failed) {
           request = null;
         }
       }
	    if((request === null) ||(typeof request==="undefined"))
       alert("Error creating request object!");
     }
	 return request;
   }

Есть функция срабатывающая по нажатию кнопки которая подготавливает и отправляет данные на сервер вот ее код
function DataSend1()
   {
	var req61=createRequest();
    var kod=document.getElementById('kod').value;
	var login=document.getElementById('login').value;
	var password= document.getElementById('password').value;
	var kod1c=document.getElementById('kod1c').value;
	var regDate=document.getElementById('regDate').value;
	var profit=document.getElementById('profit').value;
	var name=document.getElementById('name').value;

	var INN=document.getElementById('INN').value;
	var e_mail=document.getElementById('e_mail').value;
	var telefon=document.getElementById('telefon').value;
	var telefon1=document.getElementById('telefon1').value;
	var viber=document.getElementById('viber').value;
	var watsup=document.getElementById('watsup').value;
	var region=document.getElementById('region').value;
	var town=document.getElementById('town').value;
	var street=document.getElementById('street').value;
	var house=document.getElementById('house').value;
	var ofice=document.getElementById('ofice').value;
	var FIO=document.getElementById('FIO').value;
	var man_email=document.getElementById('man_email').value;
	var man_tel=document.getElementById('man_tel').value;
	var man_tel1=document.getElementById('man_tel1').value;
	var Comment=document.getElementById('Comment').value;
	var BAD=document.getElementById('BAD').checked;
	var UL=document.getElementById('UL').checked ;
	if(BAD==true){BAD=1;}
	else{BAD=0;}
	if(UL==true){UL=1;}
	else{UL=0;}
	
	 
	
	
	
	var password=document.getElementById('password').value;
	
    var data="kod="+kod+"&login="+login+"&password="+password;
	data=data+"&kod1c="+kod1c;
	data=data+"&regDate="+regDate+"&profit="+profit+"&BAD="+BAD+"&UL="+UL;
	data=data+"&name="+name+"&INN="+INN;
	data=data+"&e_mail="+e_mail+"&telefon="+telefon;
	data=data+"&telefon1="+telefon1+"&region="+region+"&viber="+viber+"&watsup="+watsup;
	data=data+"&town="+town+"&street="+street;
	data=data+"&house="+house+"&ofice="+ofice+"&FIO="+FIO;
	data=data+"&man_email="+man_email+"&man_tel="+man_tel;
	data=data+"&man_tel1="+man_tel1+"&Comment="+Comment+"&watsup="+watsup;
    
	 //  var url="proba61.php";
    req61.open("POST","proba61.php", true );
	req61.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
	
	// request.send(data);
	req61.onreadystatechange = function() {
        if (req61.readyState == 4) {
            if (req61.status == 200) {
                alert(req61.responseText);
            } else {
                alert('error' + req61.statusText);
            }
        };
	}
	document.getElementById('UL').checked=false;
	document.getElementById('BAD').checked=false;
	alert('отправляются данные :'+data);
	req61.send(data);
	document.location.href="clients.php";
	
   }

Выяснилось что в браузере Chrome код работает как я и предусматриваю. всегда отправляет запрос в браузере же Mozilla.Отправка запроса происходит не всегда.Пока в отладчикепошагово выполняю код запрос отправляется.Только снимаю точки прерывания запрос не передается.В чем тут может быть дело? Как мне исправить ситуацию и добиться гарантированной передачи запроса?
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2019, 15:00
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от izumov
Как мне исправить ситуацию и добиться гарантированной передачи запроса?
Cначала отправьте запрос, а уже потом переходите на другую страницу (строка 70)

А зачем вам оправлять запрос таким странным образом? Кто вам запретил использовать атрибут name на элементах формы? У вас интересный подход в смысле того, что пользователь может добавить свои поля.
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2019, 16:54
Аспирант
Отправить личное сообщение для izumov Посмотреть профиль Найти все сообщения от izumov
 
Регистрация: 05.05.2019
Сообщений: 72

Так я вроде так и отправляю сначала данные строка 69 а потом перехожу на
другую страницу стр 70. В яндексе и Chrome никаких проблем код не вызывает все работает как я задумал и только Mozilla преподнесла сюрприз.
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2019, 00:54
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от izumov
Так я вроде так и отправляю сначала данные строка 69 а потом перехожу на
другую страницу стр 70.
Да, но отправка является асинхронной задачей, которая занимает какое-то время! И она не всегда успевает выполниться до того, как открывается страница на 70 строке. Вам сначала нужно отправить запрос и только потом переходить на страницу!

Вот часть вашего кода. Здесь написано, что после того, как были отправлены данные и получен ответ, вывести некую информацию в диалогом окне. Вы такое видели?
req61.open("POST","proba61.php", true );
    req61.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
     
    // request.send(data);
    req61.onreadystatechange = function() {
        if (req61.readyState == 4) {
            if (req61.status == 200) {
                alert(req61.responseText);
            } else {
                alert('error' + req61.statusText);
            }
        };
    }
    document.getElementById('UL').checked=false;
    document.getElementById('BAD').checked=false;
    alert('отправляются данные :'+data);
    req61.send(data);
    *!*document.location.href="clients.php";*/!*
     
   }


Cначала отправьте запрос, а уже потом (после того, как получили ответ) переходите на другую страницу
req61.open("POST","proba61.php", true );
    req61.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
     
    // request.send(data);
    req61.onreadystatechange = function() {
        if (req61.readyState == 4) {
            if (req61.status == 200) {
                alert(req61.responseText);
            } else {
                alert('error' + req61.statusText);
            }
            *!*document.location.href="clients.php";*/!*
        };
    }
    document.getElementById('UL').checked=false;
    document.getElementById('BAD').checked=false;
    alert('отправляются данные :'+data);
    req61.send(data);
     
   }

Последний раз редактировалось Malleys, 05.06.2019 в 00:56.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему такой простой код не работает? javasc Javascript под браузер 1 22.01.2011 09:40
Почему не работатет код?! WitaliG Ваши сайты и скрипты 5 17.08.2010 09:30
Почему код работает? (обращение к форме из window) Василий Б. Элементы интерфейса 10 21.04.2010 10:10
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24
Почему не работает код? JSprog Общие вопросы Javascript 4 16.08.2009 14:39