2012-02-09 13 views
0

PHPクラスからAJAX(jQueryを使用)を介して関数に直接アクセスする方法を知っている人はいませんか?AJAXを通じてPHPクラス関数にアクセスする

PHP:

class Blah 
{ 
    function __construct() 
    { 
    } 

    function doSomething(data) 
    { 
     echo "I am not an animal"; 
    } 
} 

のjQuery:

$.ajax({ 
     url: myClass.php, 
     data: Blah.doSomething(); "or" Blah->doSomething() "or whatever" 
    }); 

私は、これは、粗例である知っている、私はちょうど私はあなたが私の質問の主旨を得ることを願って、ポイントを説明しようとしています。私はこれらの線に沿って何かやってる瞬間

$.ajax({ 
     url: myClass.php, 
     data: data : { 'type':'doSomething' } 
    }); 

を||今

if(POST['data']['type'] == 'doSomething') 
{ 
    $this->doSomething(); 
} 

そして、私はそれを好きではない...

+1

のように行うことができますか? – axiomer

+2

あなたの例が真だった場合のセキュリティへの影響を考えてみましょう。誰でもブラウザから任意のクラス関数を呼び出すことができます! – paislee

答えて

5

あなたを経由して結果を取得そのクラスのオブジェクトを作成し、必要なメソッドを呼び出す必要があります。 クラス宣言はコードを実行しません。

たとえば、あなたはクラスの下にこれを追加することができます。

class Blah { ... } 
$b = new Blah(); 
$b->doSomething(); 

UPDATE:

$method_name = $_POST['method']; 
$b->{$method_name}(); 
:あなたはPOSTで送信されたメソッドを呼び出したい場合は

、あなたは関数call_user_functionを使用することができます

もっと詳しく:http://php.net/manual/en/function.call-user-func.php

+0

*リモートプロシージャコール* - http://en.wikipedia.org/wiki/Remote_procedure_call(RPC)を参照してください。たとえば、** JSON-RPC ** - http://en.wikipedia.org/wiki/JSON-RPC – hakre

1

を私はPHPでJSONで結果を出力するよりも任意のより良い方法を考えることができない、あなたがgetJSON

0

これはできません。あなたが現在持っているものがおそらく最善の方法です。

1

私はマズッチの答えに同意します。私はこれがもう少し完全であることを願っています。

PHP:

class SomeClass{ 
//definintion 
} 
$obj = new SomeClass(); 
$obj->doStuff(); 

HTML:

<input type="button" onclick="<?php $obj->doStuff(); ?>" id="btnAdd" value="Click Me" /> 

また、あなたはxajaxの、PHP <簡素化ちょっといいフレームワークに見ることができます - > JavaScriptの相互作用を。それは同様にPHPからjs関数を呼び出すことができます。ここにリンクがあります:http://www.xajax-project.org/en/home/

3

私はなぜあなたがそうしたいのかわかりません。 それは良いプログラミングの習慣ではありません。 ができます。この

$.ajax({ 
    url: myClass.php, 
    data: {'call':'Blah.doSomething', 'args':5} 
}); 

ような何かを試すことができますし、現在のソリューションを好きではないのはなぜサーバー側であなたは

$fun = explode('.', $call); 
$function = array($fun[0], $fun[1]); 
if (is_callable($function)) { 
    $response = call_user_func_array($function, $args); 
} 
echo $response; 
1
**Your class** 
class Blah { 
    function doSomething(data) { 
     echo "I am not an animal, I'm a ".data; 
    } 
} 

**Ajax call in other document** 
$.ajax({ 
    url: example.php, 
    data: info='beast' 
    success: data() { ... 
}); 

**in example.php** 
include (class.blah.php); 
$obj = new SomeClass(); 
$obj ->doStuff($_GET['info']); 
+0

あなたのコードがどのように質問に答えるかを説明するコメントを追加することで、この回答を改善することができます... – Craig

関連する問題