Возможный дубликат:
Вызвать php-функцию из javascript
Я понимаю, что php является серверной, а JavaScript – клиентской. Но я хотел бы знать, как запустить PHP-метод при вызове функции JavaScript. Ниже мой код, я знаю, что ошибка, но как я могу выполнить php-метод?
<script type="text/javascript"> function toggle() { var ele = document.getElementById("addCatTextBox"); var text = document.getElementById("addCatButtonText"); if(ele.style.display == "block") { ele.style.display = "block"; text.innerHTML = "Save category"; <?php Category::addCategory($inCatName)?> } else { ele.style.display = "none"; text.innerHTML = "Add new category"; } } </script>
Спасибо за вашу помощь.
Использование библиотеки Prototype (www.prototypejs.org):
Javascript:
<script type="text/javascript"> function toggle() { var ele = document.getElementById("addCatTextBox"); var text = document.getElementById("addCatButtonText"); if(ele.style.display == "block") { ele.style.display = "block"; text.innerHTML = "Save category"; var options={ method: 'get', parameters: 'inCatName='+ele.value, onSuccess: function(xhr) { // TODO: Whatever needs to happen on success alert('it worked'); }, onFailure: function(xhr) { // TODO: Whatever needs to happen on failure alert('it failed'); } }; new Ajax.Request('addCategory.php', options); } else { ele.style.display = "none"; text.innerHTML = "Add new category"; } } </script>
addCategory.php:
<?php $inCatName=isset($_REQUEST["inCatName"]) ? $_REQUEST["inCatName"] : null; Category::addCategory($inCatName); ?>
Идея заключается в том, что Javascript отправляет запрос GET (или может быть POST) на страницу addCategory.php за кулисами, передавая ему любую информацию, необходимую для создания категории.
Надеюсь, этого достаточно, чтобы вы пошли. В моем коде много чего не хватает – вам нужно будет проверить переменные addCategory.php и выполнить любые другие соответствующие проверки безопасности, прежде чем разрешать их где-нибудь рядом с базой данных. addCategory.php также потребует каких-либо включенных файлов и т. д., чтобы он знал о вашем классе категории. Наконец, addCategory.php должен действительно вернуть некоторую форму переменной обратно в код Javascript, который вызвал ее, чтобы он знал, каков был результат.
Вы можете использовать запрос Ajax для конечной точки, которая запускает ваш PHP, а затем выполняет Category::addCategory($inCatName)
С помощью JQuery:
$.ajax({ url: "addCategory.php", context: document.body, success: function(){ // whatever you need to do } });
Это может помочь. Используйте ajax для вызова php-файла (в примере использовался category.php). Отправьте параметр «функция» и установите его как «addCategory». В вашем файле php напишите код, чтобы определить, установлен ли $ _GET ['function'], а также определить, установлено ли оно как «addCategory». Если это так, попросите код вызвать функцию. Я также видел, что вы пытались передать параметр $ inCatName функции php. Чтобы отправить это, просто добавьте его в url ниже.
<script type="text/javascript"> function toggle() { var ele = document.getElementById("addCatTextBox"); var text = document.getElementById("addCatButtonText"); if(ele.style.display == "block") { ele.style.display = "block"; text.innerHTML = "Save category"; var xmlhttp; if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","categories.php?function=addCategory",true); xmlhttp.send(); } else { ele.style.display = "none"; text.innerHTML = "Add new category"; } } </script>