我正在从 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 函数?
为了顺应 Lane 的说法,您可能想要制作一个非常简单的 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 可调用...这可能很危险:-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)