Как вызвать функцию 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
.
Ответы
Ответ 1
Вам нужно использовать 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']);
?>
Ответ 2
Вы не сможете сделать это так, как вы можете ускорить. PHP выполняется на сервере, прежде чем браузер получит HTML. С другой стороны, JavaScript работает в браузере и не знает о PHP (или любом другом языке на стороне сервера), используемом для создания HTML.
Чтобы "вызвать" функцию php, вы должны отправить запрос на сервер (часто называемый AJAX). Например, у вас может быть checkYear.php
script, который проверяет событие и возвращает некоторый HTML, указывающий, удалось ли проверить. Когда фрагмент HTML возвращается к JavaScript, вы вводите его на страницу.
Надеюсь, это поможет!
Ответ 3
JavaScript - это клиентский язык, PHP - это серверный язык. Поэтому вы не можете вызывать функции PHP непосредственно из кода JavaScript. Однако, что вы можете сделать, это отправить запрос AJAX (он вызывает PHP файл за кулисами) и использовать его для запуска вашего PHP-кода и возврата любых данных, которые вам нужны для JavaScript.
Ответ 4
В основном, вы смешиваете скрипты на стороне сервера (PHP) и на стороне клиента (JS).
Однако возможно - благодаря, например. к AJAX. Поскольку вы не были конкретно о том, что вам нужно делать после изменения окна выбора, я могу указать только на некоторые ресурсы и предложить следующее:
- узнайте и начните использовать jQuery (jquery.com) - это поможет вам начать работу и поддерживать совместимость между браузерами,
- узнайте, как делать запросы AJAX (например, в функции, которую вы только стреляли, когда событие
onchange
было запущено) - например. используя . post() Функция jQuery,
- узнать, как возвращать данные из PHP (например, используя
json_encode()
в PHP, но необработанный HTML тоже нормально) и использовать его в JS,
Ответ 5
Там может быть много способов сделать это. Тот, который я предпочитаю, использует MooTools
Request
объект.
Например, у вас есть script, называемый 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']
.
Ответ 6
Я работал над проектом на этой неделе и придумал простой способ вызвать php script из 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, но это быстро и относительно легко.