2011-08-23 25 views
68

JS関数を使ってPHP関数を実行する方法はありますか?このようなJavaScriptからphp関数を呼び出す

何か:

<script type="text/javascript"> 
function test(){ 
document.getElementById("php_code").innerHTML="<?php 
query("hello");  ?>";  
} 
</script> 

<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"  
onclick="test(); return false;"> test </a> 
<span id="php_code"> </span> 

私はPHPの関数を呼び出します「テスト」と呼ばれるのhrefをクリックしたとき、私は基本的に、PHP関数query("hello")を実行したいです。

+4

は、単純なし、AJAXを使用して、必要なメソッドを呼び出す以外、これを実行する方法はありません。 – TheVillageIdiot

+9

あなたは知っています:PHPはサーバー上で動作しますが、JSはクライアント上で動作しますか?これは、このようには使えません。 – KingCrunch

+0

待ち時間ではありません。 '<?php query(" hello "); ?> 'ページが読み込まれるとPHPによってレンダリングされますか?もしそうなら、彼はjs関数で 'query(" hello ")'の出力を得ることができます。 – TheVillageIdiot

答えて

131

AJAXは、の場合、です。ページが読み込まれ、要素にイベントが追加されます。ユーザーが何かをクリックするなどしてイベントをトリガーすると、JavaScriptはXMLHttpRequest objectを使用してサーバーに要求を送信します。

サーバーが応答した後(おそらく出力あり)、別のJavascript関数/イベントは、他のHTMLと同じようにページに貼り付けるなど、その出力を扱う場所を提供します。

普通のJavascriptで「手で」やjQueryを使うことができます。プロジェクトのサイズや状況によっては、単純なJavascriptを使用する方が簡単かもしれません。

平野のJavascript

この非常に基本的な例では、ユーザーがリンクをクリックしたときに、我々はmyAjax.phpにリクエストを送信します。サーバーは何らかのコンテンツを生成します。この場合は "hello world!"となります。 IDはoutputのHTML要素に入れます。

javascriptの

// handles the click event for link 1, sends the query 
function getOutput() { 
    getRequest(
     'myAjax.php', // URL for the PHP file 
     drawOutput, // handle successful request 
     drawError // handle error 
); 
    return false; 
} 
// handles drawing an error message 
function drawError() { 
    var container = document.getElementById('output'); 
    container.innerHTML = 'Bummer: there was an error!'; 
} 
// handles the response, adds the html 
function drawOutput(responseText) { 
    var container = document.getElementById('output'); 
    container.innerHTML = responseText; 
} 
// helper function for cross-browser request object 
function getRequest(url, success, error) { 
    var req = false; 
    try{ 
     // most browsers 
     req = new XMLHttpRequest(); 
    } catch (e){ 
     // IE 
     try{ 
      req = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch(e) { 
      // try an older version 
      try{ 
       req = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch(e) { 
       return false; 
      } 
     } 
    } 
    if (!req) return false; 
    if (typeof success != 'function') success = function() {}; 
    if (typeof error!= 'function') error = function() {}; 
    req.onreadystatechange = function(){ 
     if(req.readyState == 4) { 
      return req.status === 200 ? 
       success(req.responseText) : error(req.status); 
     } 
    } 
    req.open("GET", url, true); 
    req.send(null); 
    return req; 
} 

HTML

<a href="#" onclick="return getOutput();"> test </a> 
<div id="output">waiting for action</div> 

PHP

// file myAjax.php 
<?php 
    echo 'hello world!'; 
?> 

それを試してみてください:http://jsfiddle.net/GRMule/m8CTk/


をJavaScriptライブラリ(jQueryのら)

は間違いなく、それはJavascriptのコードがたくさんあるで。もちろん、ブロックを締めたり、より簡潔な論理演算子を使用したりすることで、これを短くすることができますが、そこにはまだ多くのことが起こっています。あなたのプロジェクトでこのようなことをたくさんすることを計画しているなら、あなたはJavaScriptのライブラリを使うほうが良いでしょう。

上記と同じHTMLとPHPを使用すると、これはスクリプト全体です(ページにjQueryが含まれています)。私は少しはjQueryの一般的なスタイルとより一致するようにコードを締めましたが、あなたのアイデアを得る:

// handles the click event, sends the query 
var function getOutput() { 
    $.ajax({ 
     url:'myAjax.php', 
     complete: function (response) { 
      $('#output').html(response.responseText); 
     }, 
     error: function() { 
      $('#output').html('Bummer: there was an error!'); 
     } 
    }); 
    return false; 
} 

それを試してみてください:http://jsfiddle.net/GRMule/WQXXT/

をjQueryのために急いで出て行くしないでくださいだけでまだ:任意のライブラリを追加することは、あなたがそれらを書いたかのように、数百または数千行のコードをプロジェクトに追加することと同じです。 jQueryライブラリファイルの中には、最初の例と同様のコードに加えて、ロット全体がとなっています。それは良いことかもしれませんが、そうでないかもしれません。プロジェクトの現在のサイズと将来の拡張の可能性とターゲット環境またはプラットフォームを計画し、検討します。

これがすべて必要な場合は、プレーンなjavascriptを一度書くと完了です。

ドキュメント

+1

-1、半分の答え、OPはjavascriptからphp関数を呼び出す方法を尋ねました。 Pouはphp PAGEを呼び出す方法のみを示しました。 ajax呼び出しでポスト変数を追加し、それらのポスト変数をphpでチェックし、ポスト変数が存在する場合はそのphp関数を呼び出す必要があります。 –

+5

@ Hanoncsサーバ側のコードをほぼ無限に配置できるため、OPがどのアーキテクチャを使用しているかを推測するのは建設的ではありません。 OPがPOST(またはGET)や値を渡す必要性を参照していないため、直ちに問題が発生することはありません。私はあなたのdownvoteが間違って配置されていると思う、私はOPに含まれていない主題についての任意の投機に私の答えに追加されません。しかし、フィードバックをありがとう。 –

13

PHPはサーバーで評価されます。 javascriptはクライアント/ブラウザで評価されるため、javascript から直接PHP関数を呼び出すことはできません。。しかし、AJAXを使ってPHP関数を起動するHTTPリクエストをサーバに発行することができます。

+2

@ハノンクス:これは**答えです**。 OPはあなたがJSを介してPHP関数を実行できるかどうか尋ねました。答えは - **あなたは**できません。 WebサーバーにPHP関数を実行させるHTTPリクエストを発行できるかどうかを尋ねた場合は、PHP関数を実行します。そうすれば**可能です**。しかし、彼はこれを求めていませんでした。私は無関係のデータを書いていません。 – Dor

+6

ああ、男に来て、あなたはそのOPが彼の質問によって意味されたことを知っています。もし彼がそれを正確に説明する方法を知っていたら、彼はそれをやる方法をすでに知っていたでしょう。 –

10

JSからPHPを実行する唯一の方法はAJAXです。 あなたはその後、ajax.phpにあなたが書い (/ajax.php?do=someFunctionをGET、例えばのために)サーバーにデータを送信することができます(私が使用しているJSで答えをキャッチし、その後、

function someFunction() { 
    echo 'Answer'; 
} 

if ($_GET['do'] === "someFunction") { 
    someFunction(); 
} 

をし、 012JAXリクエストを作成するためのjQuery)

多分あなたは何らかの形式の回答が必要でしょう。 JSONまたはXMLを参照してくださいが、JSONはJavaScriptで使いやすいです。 PHPでは、関数json_encode($ array)を使用できます。引数として配列を取得します。

2

私は最近、あなたがPHPの関数は、さまざまな方法で呼び出しを行うことができますjQueryプラグインを公開し:https://github.com/Xaxis/jquery.php

簡単な使用例:

// Both .end() and .data() return data to variables 
var strLenA = P.strlen('some string').end(); 
var strLenB = P.strlen('another string').end(); 
var totalStrLen = strLenA + strLenB; 
console.log(totalStrLen); // 25 

// .data Returns data in an array 
var data1 = P.crypt("Some Crypt String").data(); 
console.log(data1); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"] 
+4

JavaScriptを使ってPHP関数を呼び出すことに関して、人々が明らかに偏っている点を除いて、私の答えがなぜ投票したのかを正確に説明してください。私は合法的に解決策を提示していますか?そうではありませんか? – Xaxis

-1

PHPはサーバーで評価されます; javascriptはクライアント/ブラウザで評価されるため、javascriptから直接PHP関数を呼び出すことはできません。しかし、AJAXを使ってPHP関数を起動するHTTPリクエストをサーバに発行することができます。

、我々はPHPの関数を呼び出すことができ呼び出しAJAXを使用してPOSTを使用してメソッドをGET

+1

あなたは何かをコピーして貼り付けました。 downvote。 – jdmdevdotnet

関連する問題