用jQuery AJAX调用类方法?

时间:2009-09-30 18:43:16

标签: jquery

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

2 个答案:

答案 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可调用...这可能是危险的: - )