14

我有

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);

}

select我的问题是每次用户更改任何元素的值时如何调用 PHP 函数。

4

6 回答 6

8

你需要使用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));
}

文件.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']);
?>
于 2011-05-12T21:26:57.787 回答
7

您将无法以您可能希望的方式做到这一点。在浏览器接收 HTML 之前,PHP 在服务器上执行。另一方面,JavaScript 在浏览器中运行,不了解用于创建 HTML 的 PHP(或任何其他服务器端语言)。

要“调用”一个 php 函数,您必须向服务器发出一个请求(通常称为 AJAX)。例如,您可以有一个checkYear.php脚本来检查事件并返回一些指示检查是否成功的 HTML。当 HTML 片段返回到 JavaScript 时,您将其注入到页面中。

希望这可以帮助!

于 2011-05-12T21:17:56.147 回答
2

JavaScript 是客户端语言,PHP 是服务器端语言。因此,您不能直接从 JavaScript 代码调用 PHP 函数。但是,您可以做的是发布一个 AJAX 请求(它在后台调用一个 PHP 文件)并使用它来运行您的 PHP 代码并将您需要的任何数据返回给 JavaScript。

于 2011-05-12T21:18:09.047 回答
1

基本上,您正在混合使用服务器端 (PHP) 和客户端 (JS) 脚本。

然而,这是可能的 - 谢谢,例如。到 AJAX。因为您没有具体说明选择框更改后您到底需要做什么,所以我只能为您指出一些资源并提出以下建议:

  • 学习并开始使用 jQuery ( jquery.com ) - 它将帮助您入门并保持跨浏览器兼容性,
  • 学习如何发出 AJAX 请求(例如,在触发onchange事件时您刚刚触发的函数中) - 例如。使用.post() jQuery 函数,
  • 学习如何从 PHP 返回数据(例如json_encode()在 PHP 中使用,但原始 HTML 也可以)并在 JS 中使用它,
于 2011-05-12T21:20:12.037 回答
1

可能有很多方法可以做到这一点。我更喜欢的一个是使用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'].

于 2011-05-12T21:22:19.153 回答
0

这周我正在做一个项目,并想出了一种从 onclick() 调用 php 脚本的简单方法。它是这样的。

在这种情况下,我在一个名为“sidebarItem”的 div 上定义了一个 onclick() 调用……</p>

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

然后我做了一个简单的 JS 小函数,将外部文件加载到目标容器中……</p>

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,但它快速且相对容易。

于 2013-01-31T16:11:11.507 回答