Как вызвать функцию PHP в JavaScript?

у меня есть

index.php

 <select id="year_list" name="year_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select> <select id="event_list" name="event_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select> . . . <?php function checkYearandEvent($year, $event) { $year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'") if (mysql_num_rows($year_event) > 0) { // do this } } ?> 

myscripts.js

 function check_year_event(year_id, event_id) { var year = document.getElementById(year_id).value; var event = document.getElementById(event_id).value; // call PHP function (but I don't know how): checkYearandEvent(year, event); } 

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

Вам нужно использовать ajax. Существует основной пример:

myscripts.js

 function AjaxCaller(){ var xmlhttp=false; try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }catch(E){ xmlhttp = false; } } if(!xmlhttp && typeof XMLHttpRequest!='undefined'){ xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function callPage(url, div){ ajax=AjaxCaller(); ajax.open("GET", url, true); ajax.onreadystatechange=function(){ if(ajax.readyState==4){ if(ajax.status==200){ div.innerHTML = ajax.responseText; } } } ajax.send(null); } function check_year_event(year_id, event_id) { var year = document.getElementById(year_id).value; var event = document.getElementById(event_id).value; callPage('file.php?year='+year+'&'+'event=+'+event,document.getElementById(targetId)); } 

file.php

 <?php function checkYearandEvent($year, $event) { $year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'") if (mysql_num_rows($year_event) > 0) { // do this } } echo checkYearandEvent($_GET['year'], $_GET['event']); ?> 

Вы не сможете сделать это так, как вы могли бы ускорить. PHP выполняется на сервере, прежде чем браузер получит HTML. С другой стороны, JavaScript работает в браузере и не знает о PHP (или любом другом языке на стороне сервера), используемом для создания HTML.

Чтобы «вызвать» функцию php, вы должны отправить запрос на сервер (часто называемый AJAX). Например, у вас может быть скрипт checkYear.php который проверяет событие и возвращает некоторый HTML, указывающий, удалось ли проверить. Когда фрагмент HTML возвращается к JavaScript, вы вводите его на страницу.

Надеюсь это поможет!

JavaScript – это язык на стороне клиента, PHP – это серверный язык. Поэтому вы не можете вызывать функции PHP непосредственно из кода JavaScript. Однако, что вы можете сделать, это отправить запрос AJAX (он вызывает PHP-файл за кулисами) и использовать его для запуска вашего PHP-кода и возврата любых данных, которые вам нужны для JavaScript.

В основном, вы смешиваете серверные (PHP) и клиентские (JS) сценарии.

Однако это возможно – спасибо, например. к AJAX. Поскольку вы не были конкретно о том, что вам нужно сделать после изменения окна выбора, я могу указать только на некоторые ресурсы и предложить следующее:

  • научиться и начать использовать jQuery ( jquery.com ) – это поможет вам начать работу и поддерживать совместимость между браузерами,
  • узнайте, как делать запросы AJAX (например, в функции, которую вы только стреляли, когда событие onchange было onchange ) – например. используя функцию .post () jQuery,
  • научиться возвращать данные из PHP (например, используя json_encode() в PHP, но необработанный HTML тоже хорошо) и использовать его в JS,

Могут быть много способов сделать это. Тот, который я предпочитаю, использует объект MooTools Request .

Например, у вас есть скрипт под названием ajaxCallable.php , который получает через переменные $_REQUEST некоторые параметры, а затем вы (со стороны Javascript):

 function check_year_event(year_id, event_id) { var year = document.getElementById(year_id).value; var event = document.getElementById(event_id).value; var myRequest = new Request({method: 'get', url: 'ajaxCallable.php'}); myRequest.send('yearVar=' + year + '&eventVar=' + event); } 

то ваш ajaxCallable.php сможет получить доступ к переменным: $_REQUEST['yearVar'] и $_REQUEST['eventVar'] .

На этой неделе я работал над проектом и придумал простой способ вызвать php-скрипт из onclick (). Все идет так.

Я определяю вызов onclick () в этом случае на div, называемом «sidebarItem» …

 <a><div class="sidebarItem" onclick="populate('#content', 'help', 'open')">Click me for new content</div></a> 

Затем я создал простую небольшую функцию JS, которая загружает внешний файл в целевой контейнер …

 function populate($container, $page, $item){ $($container).load('cyclorama/includes/populate.php?$page='+$page+'&$item='+$item);} 

Затем я пишу небольшой php-файл, который получает $ page и $ item, запрашивает базу данных и возвращает новое содержимое.

 <?php $page = $_GET['$page']; $item = $_GET['$item']; $getContentQuery = "SELECT content FROM myTable WHERE page='".$page."' AND item='".$item."'"; $content = mysql_query($getContentQuery, $db); $myContent = mysql_fetch_assoc($content); echo $myContent['content'];?> 

PHP-скрипт перекликается с новым контентом и загружается в контейнер. Я думаю, что там может быть много мест. Мне было бы интересно узнать, есть ли какие-то очевидные причины НЕ делать это. Он не использует AJAX только javascript и php, но это быстро и относительно легко.