使用jQuery AJAX调用类方法?

3

我正在从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 函数?

2个回答

3

为了跟上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();

您需要对ofcourse的参数进行一些过滤,并且可能需要在htaccess/vhost中进行一些良好的重写,以便您可以使用像/ajax/class/method这样的URL。但是您已经有了一般的想法。您可能希望拥有某种有效的回调注册表,以便您不仅仅是调用任何有效的php可调用函数...那可能是危险的 :-)


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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接