2012-04-20 100 views
1

我完全不熟悉jQuery和Ajax,但我已经学会了如何做Hello World,填充选择标签等等...... 问题是,我不'不喜欢使用结构化PHP。我学到的方法是用$ .getJSON调用一些PHP文件,并且该文件必须“回显”我的结果。 我想要的是能够调用一个实际上是带有某些方法的类的PHP文件,并且该方法的返回值将是JavaScript将接收的内容而不仅仅是回显结果。使用jQuery访问PHP方法

感谢您的关注。

Ps .:我有很多使用Amfphp的PHP-OOP和Flex + PHP的经验。我试图构建不同版本的视图,我想重新使用Flex已经使用的类。

+0

注意安全隐患:防止JavaScript(通过Jonathan Sampson接受的答案中的某些代码访问PHP)能够访问不需要的方法。 – koen 2012-04-28 17:34:50

回答

5

jQuery在您的计算机上运行,​​并且PHP在服务器上运行。 PHP和jQuery只能通过一系列精心设计的字符串进行通信。在服务器上,您可以自由创建对象,运行方法,处理输出以及其他任何内容。但是,如果您要将这些数据反馈回您的jQuery应用程序(仍在客户机上运行),则需要回显(或输出)PHP脚本的结果。

您可以考虑这样的事情:

$.post('server.php', { 'class':'foo', 'method':'bar' }, function(response) { 
    /* do something with the output of $foo->bar(); */ 
}); 

正如你可以在这里看到,我可以定义我想的类和方法都要求在服务器上。从server.php开始,我们将看看$_POST['class']$_POST['method']来确定我们将要实例化的内容以及我们将运行哪些方法。

+0

因此,无论哪种方式,我将不得不使用Structural PHP来使用jQuery,对吧? – 2012-04-20 14:59:52

+1

@MarcoAurélioDeleu您不受限制使用课程。你只需要输出一些东西。你可以从对象内部做到这一点,或不。 – Sampson 2012-04-20 15:00:25

1

AMF与HTTP不同,它们是不同的协议。

当使用AJAX(jQuery或不)时,您在URI上调用HTTP方法,而不是OOP方法。因此,所有内容至少在两个映射中结束:

  • 将您的应用程序逻辑映射到方法和URI。
  • 您的Javascript代码映射到方法和URI。

下面是使用Respect\Rest一个样本:

$router->get('/users/*', function($userName) { 
    return MyDatabaseLayer::fetchUser($userName); //Illustrative 
})->accept(
    'application/json' => function($data) { 
     header('Content-type: application/json'); 
     return json_encode($data); 
    } 
); 

现在jQuery的部分:

$.getJSON('/users/alganet', function(user) { 
    alert(user.name); 
}); 

您应该使用不同的操作相应的HTTP方法。保存的用户会是这样的:

$router->post('/users/*', function($userName) { 
    return MyDatabaseLayer::saveUser($_POST['user']); //Illustrative 
}); 

的jQuery:

$.post('/users', $("$userform").serialize()); 

主要有四种HTTP方法:GET,POST,PUT和DELETE。 GET和POST是最常见的。

有一个很好的琐事:HTTP,REST和AMF都是由同一个人写的:Roy Fielding。

+1

woa ...极端javascriptified php ....但这个答案的基本是重要的。这不是jQuery和PHP的问题,必须一起工作,而是通过http(s)传输数据的问题。 jQuery不知道服务器上有一个PHP脚本,PHP脚本不知道它传递给一个打开的Ajax连接。 PHP脚本被请求调用,进行一些计算并提供(HTML/JSON/whatever)字符串。脚本的内部工作完全取决于你,狡猾的程序员 – cypherabe 2012-04-20 15:19:25

+0

快速的问题,也许你可以帮助我避免创建另一个堆栈问题:怎么样的jQuery使AMF调用?可能吗?也许通过jQuery和AMFPHP之间的网关,我可以从jQuery创建一个HTTP Post到“Some_HTTP_To_AMF_Gateway”,然后这个网关将转换这个调用。由于我已经在服务器上,所以调用会在本地,我可以使用Flex + PHP已有的所有功能。 – 2012-04-20 15:23:49

+0

我相信这是可能的,但我从来没有测试过这样的东西。考虑到AS3与JavaScript相似,从某处移植它可能比预期的更容易。 – alganet 2012-04-20 15:33:23