我正从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可调用...这可能很危险:-)

09-10 10:29
查看更多