2011-05-12 149 views
13

如何在JavaScript中調用PHP函數?

index.php

​​

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的值時元件。

+0

請先閱讀這篇文章:http://answers.yahoo.com/question/index?qid=20090602184659AAjObIj – Marcin 2011-05-12 21:18:04

+14

雅虎的回答,真的嗎? – 2011-05-12 21:22:02

+1

@RocketHazmat我知道這是古老的,但大聲笑 – MonkeyZeus 2014-02-26 13:24:19

回答

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

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']); 
?> 
+0

如果'checkYearandEvent()'需要返回一些JavaScript變量? – 2013-05-17 07:06:33

+0

您可以打印'

7

您將無法按照您的預期操作。在瀏覽器接收HTML之前,PHP在服務器上執行。另一方面,JavaScript運行在瀏覽器中,並且不知道用於創建HTML的PHP​​(或任何其他服務器端語言)。

要「調用」php函數,您必須向服務器發出請求(通常稱爲AJAX)。例如,您可以使用一個checkYear.php腳本來檢查事件並返回一些指示檢查是否成功的HTML。當HTML片段返回到JavaScript時,將其注入到頁面中。

希望這會有所幫助!

2

JavaScript是客戶端語言,PHP是服務器端語言。因此,您無法直接從JavaScript代碼調用PHP函數。然而,你可以做的是發佈一個AJAX請求(它在後臺調用一個PHP文件)並使用它來運行你的PHP代碼,並將你需要的任何數據返回給JavaScript。

1

基本上,您正在混合服務器端(PHP)和客戶端(JS)腳本。

然而,這是可能的 - 感謝例如。到AJAX。因爲你沒有具體說明什麼你到底需要選擇框更改後,要做做,我只能指向你一些資源,並提出以下幾點:

  • 學習,並開始使用jQuery(jquery.com) - 這將有助於你開始使用並保持跨瀏覽器兼容性,例如,你可以學習如何製作AJAX請求(例如,在你剛開始觸發事件時觸發的功能)。使用.post() jQuery的功能,
  • 學習如何從PHP(在PHP中使用json_encode()如,但原始的HTML也行)返回數據,並在JS使用它,
1

可能有很多方法可以做到這一點。我更喜歡的一個是使用MooToolsRequest對象。

例如,您有一個名爲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']

0

我工作的這個星期一個項目,並用一個簡單的方法來想出了從onclick()調用一個php腳本。它是這樣的。

我定義在這種情況下,在一個名爲「sidebarItem」 DIV一個onclick()調用...

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