Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   PHP функция в javascript (https://javascript.ru/forum/events/46346-php-funkciya-v-javascript.html)

cript 06.04.2014 19:33

PHP функция в javascript
 
Приветствую!
Данный код отображает введенный в инпуте текст на странице.
<input type="number" name="add" id="add" value="100">
<span id="infomsg"></span>
<script>
$('#add').keyup(function(){
var Price = '<?=$price;?>';
var Value = $('#add').val();
var Total = Value * Price;
var Total = '<?=action(Total);?>'; // <-- php функция
$('#infomsg').empty();
$('#infomsg').text(Total);
});
</script>

Есть php функция action, не получается добавить ее в этот код, подскажите что можно сделать?

Erolast 06.04.2014 19:36

http://phpfaq.ru/na_tanke

cript 06.04.2014 19:42

Цитата:

Сообщение от Erolast
http://phpfaq.ru/na_tanke

При чем здесь это?

Erolast 06.04.2014 19:49

В чем отличие клиента от сервера знаешь?) Тогда не причем.

Не забывай echo.
<input type="number" name="add" id="add" value="100">
<span id="infomsg"></span>
<script>
$('#add').keyup(function(){
var Price = '<?= echo($price); ?>';
var Value = $('#add').val();
var Total = Value * Price;
var Total = '<?= echo(action(Total)); ?>'; // <-- php функция
$('#infomsg').empty();
$('#infomsg').text(Total);
});
</script>

deivan 06.04.2014 19:51

Цитата:

Сообщение от cript (Сообщение 306454)
При чем здесь это?

При том, что php выполняется на сервере, а javascript - на клиенте.
Т.е. нельзя путать теплое с мягким.

А конкретно по коду -
1. почему переменная Total объявляется дважды - в 7й и 8й строке?.. Это некорректно.
2. в пхп-вставке в качестве аргумента функции action используется функия Total - она где-то определена в скрипте пхп?..
(2.1. если вы таким семантическим способом пытаетесь передать javascript переменную Total из клиента в php-функцию action на сервере -- то это большая ошибка есть.)

cript 06.04.2014 19:52

Вот как бы вы добавили в php переменную js?
var abc = '1';
<?php
echo ???
?>

Erolast 06.04.2014 19:53

Цитата:

Вот как бы вы добавили в php переменную js?
var abc = '1';
<?php
echo ???
?>
А, ну таки не знаешь. Прочти статью по ссылке, иначе так и не будет ничего получаться.

cript 06.04.2014 19:59

var Total = '<?php echo action('"+Total+"');?>';
так не получается..

Erolast 06.04.2014 20:00

Ты что сделать пытаешься? Использовать php функцию из javascript?

cript 06.04.2014 20:04

Цитата:

Сообщение от Erolast
Ты что сделать пытаешься? Использовать php функцию из javascript?

Можно что то еще придумать? Аяксом например?

Erolast 06.04.2014 20:07

Через обращение к определенному php скрипту по ajax - можно, да. Напрямую - нельзя. php исполняется на сервере, не в браузере клиента, а на сервере, результат его выполнения - html-страница. Клиент обратился к серверу, php скрипт отработал, вывел html-страницу - все, до свидания.

cript 08.04.2014 03:31

Скажите что не так делаю
<script type="text/javascript">
$('#num').bind("keyup change", function(){
var num = $("#num").val();
$.post('ajax.php', {
num: num
},
function (data) {
$("#system_msg").html(data);
}
);
});
</script>
<div id="system_msg"></div>
<input type="text" id="num" value="">

Hapson 08.04.2014 10:30

Цитата:

Сообщение от cript (Сообщение 306451)
Приветствую!
Данный код отображает введенный в инпуте текст на странице.
<input type="number" name="add" id="add" value="100">
<span id="infomsg"></span>
<script>
$('#add').keyup(function(){
var Price = '<?=$price;?>';
var Value = $('#add').val();
var Total = Value * Price;
var Total = '<?=action(Total);?>'; // <-- php функция
$('#infomsg').empty();
$('#infomsg').text(Total);
});
</script>

Есть php функция action, не получается добавить ее в этот код, подскажите что можно сделать?

Мусье знает толк в извращениях... :)
Ученые тоже как-то пытались скрестить свинью с человеком - нихера не вышло... :)
<?=$var ?>
<?php echo $var; ?>

Эти записи эквивалентны, но первая работает не всегда
Если нужно вызвать функцию, то echo не нужно
<?php foo(); ?>

Ну а если извращаться...
<script>
var total = 100;
var total = "<?php action("+ total +"); ?>";
</script>

Ну и естественно php должен выполнять код в этом файле - см. расширение

cript 08.04.2014 13:43

Hapson,
"<?php action("+ total +"); ?>"; - такой вариант не срабатывает, делаю так: "<?=money("+ Total +");?>"; - функция работает, но не считывается переменная..

cript 08.04.2014 15:26

Подскажите как правильно сделать, чтобы при изменении текста отправлялся запрос..? Делаю так но ничего не происходит..

<script type="text/javascript">
$('#num').bind("keyup change", function(){
var num = $("#num").val();
$.post('ajax.php', {
num: num
},
function (data) {
$("#system_msg").html(data);
}
);
});
</script>
<div id="system_msg"></div>
<input type="text" id="num" value="">

nyols 08.04.2014 15:49

Полагаю что вы не правильно передаете данные.

Вместо
{
num: num
}


Надо
{
data: {num: num}
}

cript 08.04.2014 15:59

Цитата:

Сообщение от nyols
{
data: {num: num}
}

Смотрел в браузере данные не передаются..

jsnb 08.04.2014 16:35

Блок со скриптом после HTML элементов поставь. И зачем вешать сразу на keyup и на change? Получается при каждом введенном символе будет отправляться 2 одинаковых запроса.

cript 08.04.2014 17:25

Цитата:

Сообщение от jsnb
Блок со скриптом после HTML элементов поставь. И зачем вешать сразу на keyup и на change? Получается при каждом введенном символе будет отправляться 2 одинаковых запроса.

Как оказалось все решается гораздо проще:
$(document).ready(function(){   
$('input[name=num]').on("keyup paste cut IE9EventFix change", function (){ 
var Total = document.getElementById('num').value;
$.ajax({
type: 'POST',
url: 'ajax.php',
data: "Total=" + Total,
success: function(data) {
$('#infomsg').html(data);
}
});           
});
});

cript 08.04.2014 17:27

Цитата:

Сообщение от jsnb
И зачем вешать сразу на keyup и на change? Получается при каждом введенном символе будет отправляться 2 одинаковых запроса.

Потому что Input type="number"
Делаю так
.on("keyup paste cut IE9EventFix change"...

Посмотрел отправляется один запрос.

jsnb 08.04.2014 17:43

Цитата:

Сообщение от cript (Сообщение 306770)
Потому что Input type="number"
Делаю так
.on("keyup paste cut IE9EventFix change"...

Посмотрел отправляется один запрос.

Так ввод в поле запрещен? Потому, что например при вставке через ctrl+v сработает и keyup на v keyup на ctrl, paste + change при потере фокуса. Нехило так для одного изменения...
Вот для демонстрации: http://learn.javascript.ru/play/1cQHsb
Показывает все срабатывания обработчиков. Не надо забывать, что change в некоторых браузерахсрабатывает при потере фокуса.

cript 08.04.2014 19:53

Цитата:

Сообщение от jsnb
при вставке через ctrl+v сработает и keyup на v keyup на ctrl, paste + change при потере фокуса

И в правду создается 3 запроса..
Может посоветуете что нибудь оптимальное?

jsnb 09.04.2014 03:40

Цитата:

Сообщение от cript (Сообщение 306794)
И в правду создается 3 запроса..
Может посоветуете что нибудь оптимальное?

Для нормальных браузеров использовать input. Для старых IE вместо input юзать propertychange.


Часовой пояс GMT +3, время: 13:46.