Показать сообщение отдельно
  #1 (permalink)  
Старый 10.02.2016, 16:27
Новичок на форуме
Отправить личное сообщение для alagor Посмотреть профиль Найти все сообщения от alagor
 
Регистрация: 10.02.2016
Сообщений: 2

Прошу помощи, вызов нескольких функций из input, ajax
Условно назову блоками.
Блок 1:
function callServer_protect_ov() {
  var protect_ov1 = document.getElementById("protect_ov1").value;
  var protect_hand = document.getElementById("protect_hand").value;
  var url = "summ_protect_ov.php?protect_ov1=" + escape(protect_ov1) +"&protect_hand=" + escape(protect_hand);
  xmlHttp.open("GET", url, true);
  xmlHttp.onreadystatechange = updatePage_protect_ov;
  xmlHttp.send(null);
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}

function updatePage_protect_ov() {
  if (xmlHttp.readyState == 4) {
    var response_protect_ov = xmlHttp.responseText;
    document.getElementById("protect_ov").value = response_protect_ov;
  }
}


Блок2: (идентичен первому):

function callServer_protect_zv() {
  var protect_zv1 = document.getElementById("protect_zv1").value; 
  var protect_hand = document.getElementById("protect_hand").value;
  var url = "summ_protect_zv.php?protect_zv1=" + escape(protect_zv1) +"&protect_hand=" + escape(protect_hand);
  xmlHttp.open("GET", url, true);
  xmlHttp.onreadystatechange = updatePage_protect_zv;
  xmlHttp.send(null);
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}	

function updatePage_protect_zv() {
  if (xmlHttp.readyState == 4) {
    var response_protect_zv = xmlHttp.responseText;
    document.getElementById("protect_zv").value = response_protect_zv;
  }
}


Вызов происходит из input’ов:
<input type="text" name="protect_ov2" id="protect_ov2" onChange="callServer_protect_ov();" />
<input type="text" name="protect_zv2" id="protect_zv2" onChange="callServer_protect_zv();" />


В php происходит суммирование, возвращенное значение падает в соответствующие инпуты:
<input type="text" name="protect_ov" id="protect_ov" readonly />
<input type="text" name="protect_zv" id="protect_zv" readonly />

……

В таком виде все работает, т.е. при внесении значения в поле ввода наблюдаем результат сложения.

Чего пытаюсь добиться: чтобы при воде значения в ОДНОМ инпуте данные записались не в один а в два (и более - код сократил на кол-во однотипных строк чтобы не загромождать), т.е. что-то вроде
<input type="text name="protect_hand" id="protect_hand" onChange="callServer_protect_ov(); callServer_protect_zv(); " />

Или запихать несколько функций в одну и обращаться к ней – результат получил тот же…

В таком варианте, естественно, происходит игнор функции updatePage_protect_ov и результате видим результат только в последнем поле.

Пробовал вместо ссылки на функцию xmlHttp.onreadystatechange = updatePage_protect_ov; сразу вызывать ее
xmlHttp.onreadystatechange = function updatePage_protect_ov (){
…
}

В отладчике вижу, как строка после обращения к функции updatePage_protect_ov сразу перескакивает на закрывающую скобку и уходит на отработку callServer_protect_zv (это уже отрабатывается до конца.)

Что-то я недопонимаю и в чем загвоздка никак не могу решить...

Прошу помощи)

p.s. подумал, что возможно стоит увидеть php чтобы понять что на сервере делается и какие данные получаем, пример ниже:
<?php
$protect_ov1='';
$protect_ov2='';
$protect_hand='';

if(isset($_GET['protect_ov1'])){  $protect_ov1 = $_GET['protect_ov1'];  }
if(isset($_GET['protect_ov2'])){  $protect_ov2 = $_GET['protect_ov2'];  }
if(isset($_GET['protect_hand'])){  $protect_hand = $_GET['protect_hand'];  }

  $protect_ov = $protect_ov1 + $protect_ov2 + $protect_hand;
  echo json_encode($protect_ov); 
  exit; 
?>
Ответить с цитированием