Intereting Posts
Расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO Symfony2 Нет классов метаданных для обработки Safari 5.1 in не позволяет источнику <video> обнаруживать переменные $ _SESSION Как декодировать такую ​​странную строку в UTF-8? (PHP) PHP – выход или возврат, который лучше? Сохранение изображений в базе данных mysql Ограничение загрузки файлов Настройка установки PHP: ошибка: не удается найти php_pdo_driver.h Это инъекция зависимостей, и это плохая практика? PHP / JAVASCRIPT / Mysql: предотвращение инъекций javascript Можно ли сохранить прозрачность изображения PNG при использовании PHP GDlib imagecopyresampled? CodeIgniter + jQuery UI autocomplete = 500 внутренних ошибок сервера (с кодом) как получить доступ к php определенной константе, используя переменную $ как имя определенной константы Смещение 0 недействительно для индекса результата MySQL 64 (или данные запроса не загружены) установите флажки рядом с элементами таблицы html php

Как я могу вызвать PHP-функции JavaScript?

Я пытаюсь вызвать php-функцию из внешнего php-файла в javascript. Мой код отличается и большой, поэтому я пишу пример кода здесь.

Это мой php-код:

<?php function add($a,$b){ $c=$a+$b; return $c; } function mult($a,$b){ $c=$a*$b; return $c; } function divide($a,$b){ $c=$a/$b; return $c; } ?> 

Это мой код javascript:

 <script> var phpadd= add(1,2); //call the php add function var phpmult= mult(1,2); //call the php mult function var phpdivide= divide(1,2); //call the php divide function </script> 

Так вот что я хочу делать.

Мой оригинальный php-файл не включает эти математические функции, но идея такая же.

Если каким-то образом у него нет правильного решения, тогда предложите мне альтернативу, но он должен вызывать значения из внешнего php.

Да, вы можете выполнить запрос ajax на сервер с вашими данными в параметрах запроса, как это (очень просто):

Обратите внимание, что в следующем коде используется jQuery

 jQuery.ajax({ type: "POST", url: 'your_functions_address.php', dataType: 'json', data: {functionname: 'add', arguments: [1, 2]}, success: function (obj, textstatus) { if( !('error' in obj) ) { yourVariable = obj.result; } else { console.log(obj.error); } } }); 

и your_functions_address.php:

  <?php header('Content-Type: application/json'); $aResult = array(); if( !isset($_POST['functionname']) ) { $aResult['error'] = 'No function name!'; } if( !isset($_POST['arguments']) ) { $aResult['error'] = 'No function arguments!'; } if( !isset($aResult['error']) ) { switch($_POST['functionname']) { case 'add': if( !is_array($_POST['arguments']) || (count($_POST['arguments']) < 2) ) { $aResult['error'] = 'Error in arguments!'; } else { $aResult['result'] = add(floatval($_POST['arguments'][0]), floatval($_POST['arguments'][1])); } break; default: $aResult['error'] = 'Not found function '.$_POST['functionname'].'!'; break; } } echo json_encode($aResult); ?> 

Попробуй это

 <script> var phpadd= <?php echo add(1,2);?> //call the php add function var phpmult= <?php echo mult(1,2);?> //call the php mult function var phpdivide= <?php echo divide(1,2);?> //call the php divide function </script> 

используйте document.write, например,

 <script> document.write(' <?php add(1,2); ?> '); document.write(' <?php milt(1,2); ?> '); document.write(' <?php divide(1,2); ?> '); </script> 

Вам необходимо создать API: ваши функции js выполняют запросы AJAX на вашем веб-сервисе

  var mult = function(arg1, arg2) $.ajax({ url: "webservice.php?action=mult&arg1="+arg1+"&arg2="+arg2 }).done(function(data) { console.log(data); }); } 

на стороне php вам нужно будет проверить параметр действия, чтобы выполнить функцию propre (в основном оператор switch в переменной $ _GET ["action"])

index.php

 <body> ... <input id="Div7" name="Txt_Nombre" maxlenght="100px" placeholder="Nombre" /> <input id="Div8" name="Txt_Correo" maxlenght="100px" placeholder="Correo" /> <textarea id="Div9" name="Txt_Pregunta" placeholder="Pregunta" /></textarea> <script type="text/javascript" language="javascript"> $(document).ready(function() { $(".Txt_Enviar").click(function() { EnviarCorreo(); }); }); function EnviarCorreo() { jQuery.ajax({ type: "POST", url: 'servicios.php', data: {functionname: 'enviaCorreo', arguments: [$(".Txt_Nombre").val(), $(".Txt_Correo").val(), $(".Txt_Pregunta").val()]}, success:function(data) { alert(data); } }); } </script> 

servicios.php

 <?php include ("correo.php"); $nombre = $_POST["Txt_Nombre"]; $correo = $_POST["Txt_Corro"]; $pregunta = $_POST["Txt_Pregunta"]; switch($_POST["functionname"]){ case 'enviaCorreo': EnviaCorreoDesdeWeb($nombre, $correo, $pregunta); break; } ?> 

correo.php

 <?php function EnviaCorreoDesdeWeb($nombre, $correo, $pregunta) { ... } ?> 

Попробуйте взглянуть на CASSIS . Идея состоит в том, чтобы смешивать PHP с JS, чтобы оба могли работать на стороне клиента и сервера.

Я написал для меня несколько сценариев. Я надеюсь, что это может пригодиться вам

 <?php if(@$_POST['add']) { function add() { $a="You clicked on add fun"; echo $a; } add(); } else if (@$_POST['sub']) { function sub() { $a="You clicked on sub funn"; echo $a; } sub(); } ?> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST"> <input type="submit" name="add" Value="Call Add fun"> <input type="submit" name="sub" Value="Call Sub funn"> <?php echo @$a; ?> </form> к <?php if(@$_POST['add']) { function add() { $a="You clicked on add fun"; echo $a; } add(); } else if (@$_POST['sub']) { function sub() { $a="You clicked on sub funn"; echo $a; } sub(); } ?> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST"> <input type="submit" name="add" Value="Call Add fun"> <input type="submit" name="sub" Value="Call Sub funn"> <?php echo @$a; ?> </form> 

Если вы действительно хотите отправить данные в php-скрипт, например, вы можете сделать это:

Php:

 <?php $a = $_REQUEST['a']; $b = $_REQUEST['b']; //totally sanitized echo $a + $b; ?> 

Js (с использованием jquery):

 $.post("/path/to/above.php", {a: something, b: something}, function(data){ $('#somediv').html(data); }); 

Это отлично работает для меня:

Чтобы вызвать функцию PHP (с параметрами тоже), вы можете, как и многие люди, отправить параметр, открывающий файл PHP, и оттуда проверить значение параметра для вызова функции. Но вы также можете сделать так много людей, которые говорят, что это невозможно: прямо вызовите правильную функцию PHP, не добавляя код в файл PHP.

Я нашел путь:

Это для JavaScript:

 function callPHP(expression, objs, afterHandler) { expression = expression.trim(); var si = expression.indexOf("("); if (si == -1) expression += "()"; else if (Object.keys(objs).length > 0) { var sfrom = expression.substring(si + 1); var se = sfrom.indexOf(")"); var result = sfrom.substring(0, se).trim(); if (result.length > 0) { var params = result.split(","); var theend = expression.substring(expression.length - sfrom.length + se); expression = expression.substring(0, si + 1); for (var i = 0; i < params.length; i++) { var param = params[i].trim(); if (param in objs) { var value = objs[param]; if (typeof value == "string") value = "'" + value + "'"; if (typeof value != "undefined") expression += value + ","; } } expression = expression.substring(0, expression.length - 1) + theend; } } var doc = document.location; var phpFile = "URL of your PHP file"; var php = "$docl = str_replace('/', '\\\\', '" + doc + "'); $absUrl = str_replace($docl, $_SERVER['DOCUMENT_ROOT'], str_replace('/', '\\\\', '" + phpFile + "'));" + "$fileName = basename($absUrl);$folder = substr($absUrl, 0, strlen($absUrl) - strlen($fileName));" + "set_include_path($folder);include $fileName;" + expression + ";"; var url = doc + "/phpCompiler.php" + "?code=" + encodeURIComponent(php); $.ajax({ type: 'GET', url: url, complete: function(resp){ var response = resp.responseText; afterHandler(response); } }); } 

Это для PHP-файла, который не является вашим файлом PHP, а другой, какой путь написан в переменной url функции JS callPHP , и требуется оценить PHP-код. Этот файл называется «phpCompiler.php», и он находится в корневом каталоге вашего сайта:

 <?php $code = urldecode($_REQUEST['code']); $lines = explode(";", $code); foreach($lines as $line) eval(trim($line, " ") . ";"); ?> 

Таким образом, ваш PHP-код остается равным, кроме возвращаемых значений, которые будут отражены:

 <?php function add($a,$b){ $c=$a+$b; echo $c; } function mult($a,$b){ $c=$a*$b; echo $c; } function divide($a,$b){ $c=$a/$b; echo $c; } ?> 

Я предлагаю вам помнить, что требуется jQuery:
Загрузите его из Google CDN:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

или из Microsoft CDN: «Я предпочитаю Google! :)»

 <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script> 

Лучше всего загрузить файл с одного из двух CDN и поместить его в качестве локального файла, поэтому загрузка вашего сайта начнется быстрее!

Выбор для вас!

Теперь ты закончил! Я просто расскажу вам, как использовать функцию callPHP . Это JavaScript для вызова PHP:

 //Names of parameters are custom, they haven't to be equals of these of the PHP file. //These fake names are required to assign value to the parameters in PHP //using an hash table. callPHP("add(num1, num2)", { 'num1' : 1, 'num2' : 2 }, function(output) { alert(output); //This to display the output of the PHP file. });