Получение переменной из php в ajax
Доброго времени суток люди добрые.
Помогите начинающему решить такую задачу. Есть необходимость составить форму - таблицу, в которой при изменении одного из нескольких значений все остальные на лету пересчитывались php скриптом. Объясните или подскажите пожалуйста на вот таком примере: Это пхп: <? $a=$_GET['a']; $b=$_GET['b']; $c=round($a+$b,2); $d=round($a/$b,2); $e=round($d+$b); ?> Это Html: <html> <head> <meta charset="UTF-8"> <title>Document</title> <script> ????? </script> </head> <body> <form action="math.php"> a: <input type="number" value="$a"> b: <input type="number" value="$b"> c: <input type="number" value="$c" disabled="disabled"> d: <input type="number" value="$d" disabled="disabled"> e: <input type="number" value="$e" disabled="disabled"> </form> </body> </html> Прошу прощения заранее если оскорбил чувства специалистов подобной элементарщиной. Просто чтобы начать хоть как-то изучать, надо с чего-то нужного начать. А это как раз нужно. Спасибо.:-? P.S. Гуглил. Не нашел того, что нужно или не разобрался. |
А round то зачем? input type="number" в современных браузерах будет с кнопками, которыми можно производить изменение значения. По умолчанию, когда не указан шаг изменения значения, значение будет изменяться на единицу, а без указания минимального значения для поля, значения могут быть и отрицательными.
<input type="number" value="$a"> $_GET['a'] может определить атрибут name поля формы равный "a", но никак не значение поля равное "а". Более того, value="$a" никак не будет означать присвоение этому полю значения переменной $a. Чтобы ее прописать полю необходимо value="<?=$a?>". |
Да дело в том, что не хотел усложнять. На самом деле все выглядит так:
<?
$k1 = $_GET['k1'];
$k2 = $_GET['k2'];
$cash1 = $_GET['cash1'];
$step = $_GET['step'];
$ke=$k2;
echo 'k1 = '.$k1.'<br>';
echo 'k2 = '.$k2.'<br>';
echo 'cash1 = '.$cash1.'<br>';
while ($k2 < $k1) {
$n++;
$cash2 = ($k1/$k2)*$cash1;
$c1 = $k1*$cash1-$cash1;
$c2 = $k2*$cash2-$cash2;
$p1 = $c1-$c1*6.5/100;
$p2 = ($c1-$c2)-(($c1-$c2)*6.5/100);
echo $n.': Up = '.$k1.', Down = '.$k2.' Cash2 = '.round($cash2,2).' Profit = '.round($p2,2).'<br>';
$k2 = $k2 + $step;
}
?>
<html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action=""> k1:<input type="number" min="1.01" step="0.01" name="k1" value="<?echo $k1;?>"> k2:<input type="number" min="1.01" step="0.01" name="k2" value="<?echo $ke;?>"> cash1:<input type="number" name="cash1" value="<?echo $cash1;?>"> step:<input type="number" step="0.01" name="step" value="<?echo $step;?>"> <input type="submit" value="OK"> </form> </body> </html> и все работает. Хочется прилепить к этому делу ajax, чтобы когда изменяешь значение в форме менялись все зависимые значения на лету. |
Уверены, что будет работать?
<input type="number" min="1.01" step="0.01" name="k1" value="10000.1"> Проверяйте. Уже с этим значением завалить ваш сервер раз плюнуть. Поля ввода не имеют макс. значений, а сервер не проверяет этого, как и не проверяет тип принятых данных. Если в рамках HTML5, тогда так:
<?
if($_GET) {
$k1 = $_GET['k1'];
$k2 = $_GET['k2'];
$cash1 = $_GET['cash1'];
$step = $_GET['step'];
$ke=$k2;
$s = 'k1 = '.$k1.'<br>k2 = '.$k2.'<br>cash1 = '.$cash1.'<br>';
while ($k2 < $k1) {
$n++;
$cash2 = ($k1/$k2)*$cash1;
$c1 = $k1*$cash1-$cash1;
$c2 = $k2*$cash2-$cash2;
$p1 = $c1-$c1*6.5/100;
$p2 = ($c1-$c2)-(($c1-$c2)*6.5/100);
$s .= $n.': Up = '.$k1.', Down = '.$k2.' Cash2 = '.round($cash2,2).' Profit = '.round($p2,2).'<br>';
$k2 = $k2 + $step;
}
exit($s);
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(function() {
$('form').change(function() {
$.get(location, $(this).serialize(), function(d) {
$('#res').html(d)
});
return false;
})
});
</script>
</head>
<body>
<form>
k1:<input type="number" min="1.01" step="0.01" name="k1" value="">
k2:<input type="number" min="1.01" step="0.01" name="k2" value="">
cash1:<input type="number" name="cash1" value="">
step:<input type="number" step="0.01" name="step" value="">
<input type="submit" value="OK">
</form>
</div>
<p id="res"></p>
</body>
</html>
Установите значения полям формы по умолчанию, то есть когда страница отдается пользователю. |
Спасибо добрый человек. Все получилось. У меня сервер на ноуте стоит, и почему-то грелся сильно и браузер грузил процессор на 98% пока не сделал exit(); вместо exit($s);.
Только вот еще вопрос: здесь $.get(location, $(this).serialize(), function(d) вместо location мне кажется можно вписать адрес до пхп файла, чтобы вынести код. Это так? Дело в том, что у меня на вышло. |
exit — выводит сообщение и прекращает выполнение текущего скрипта. Строка сообщения $s формируется в цикле, именно он и грузит ваш процессор. Я же вам показал значение при котором сервер начнет "глубоко задумываться", и последствия этих раздумий могут быть плачевны. Вывод сразу, без конкатенации строки, разгрузит немного процессор, но не устраняет проблемы.
На месте location в методе .get() и указывается url по которому происходит запрос. Но location, это тоже адрес - url текущей страницы, я пишу так чтобы не привязывать пример к конкретному имени файла, у меня он может называться a.php, а вы его можете запускать как b.html по любому пути. |
| Часовой пояс GMT +3, время: 19:26. |