我正在从PHP AJAX库xajax迁移到jQuery AJAX。
使用xajax,我可以通过将公共类方法绑定到javascript函数名来包含类方法中的所有AJAX调用(例如$ this-> registerFunction('javascriptFunctionName',& $ this,'classMethodName'))。
我希望有一种方法可以用jQuery AJAX做类似的事情,我可以这样做:
$('#myButton').click(function() {
$.get('class|methodName',
{
parameter: value
},
function(data) {
if (data) {
...
}
else {
...
}
});
return false;
});
});
我知道您可以通过AJAX调用MVC控制器方法,但不幸的是我的遗留产品不使用MVC: - (
请告诉我有办法吗?
如果没有,有没有办法将调用映射到全局PHP函数?
答案 0 :(得分:2)
Jquery没有规定您的服务器(PHP)应该如何表现。它只是对您提供的URL发出xhr http请求。您必须根据自己希望服务器的响应方式制定自己的约定。
在我的PHP应用程序中,我通常会检查$ _SERVER ['HTTP_X_REQUESTED_WITH'],然后像其他任何请求一样处理jquery请求。
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
// handle ajax request
}
答案 1 :(得分:2)
捎带什么样的车道说你可能想要制作一个非常简单的ajax控制器并将所有内容路由到它:
<?php
class AjaxController {
protected $_vars = null;
protected $ajax = null;
public function __construct()
{
$this->_vars = array_merge($_GET, $_POST);
$this->_ajax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
$this->_response = null;
}
public function process()
{
if($this->isAjax()){
if(isset($this->_vars['method']) && isset($this->_vars['class'])
{
$callback = array($this->_vars['class'], $this->_vars['method'];
} elseif(isset($this->_vars['function'])){
$callback = $this->_vars['function'];
}
if(isset($callback) && is_callable($callback))
{
$this->_responseData = call_user_func($callback, $this->_vars);
$this->sendResponse(200);
} else {
$this->_responseData = 'UH OH';
$this->sendResponse(500);
}
}
}
public function sendResponse($httpStatCode = 200){
// set headers and whatevs
print $this->_response;
exit;
}
} // END CLASS
$contoller = new AjaxController();
$controller->process();
你想对当前的段落进行一些过滤,并且可能在htaccess / vhost中进行一些不错的重写,这样你就可以使用像/ ajax / class / method这样的网址了?...但是你得到了一般的想法。你可能想要一些有效的callbak注册表,所以你不只是调用任何有效的php可调用...这可能是危险的: - )