我正从PHP AJAX库xajax移至jQuery AJAX。
使用xajax,我可以通过将公共类方法绑定到javascript函数名称(例如$ this-> registerFunction('javascriptFunctionName',&$ this,'classMethodName'))来将我的所有AJAX调用包含在类方法中。
我希望有一种方法可以用jQuery AJAX做类似的事情,从而可以做这样的事情:
$('#myButton').click(function() {
$.get('class|methodName',
{
parameter: value
},
function(data) {
if (data) {
...
}
else {
...
}
});
return false;
});
});
我知道您可以AJAX调用MVC控制器方法,但是很遗憾,我的旧产品不使用MVC :-(
请告诉我有办法吗?
如果没有,是否有办法将调用映射到全局PHP函数?
最佳答案
piggy带你说的是什么,您可能想要制作一个非常简单的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之类的url?...但是您了解了总体思路。您可能希望拥有某种有效的callbak注册表,以便您不只是调用任何有效的php可调用...这可能很危险:-)