2009-09-30 160 views
2

我正在从PHP AJAX库xajax转移到jQuery AJAX。通过将公共类方法绑定到javascript函数名(例如,$ this-> registerFunction('javascriptFunctionName',& $ this,'classMethodName')),可以在类方法中包含我所有的AJAX调用。用jQuery AJAX调用类方法?

我希望有一种方法可以让我做jQuery的AJAX,类似的东西,由此我可以做这样的事情:

$('#myButton').click(function() { 
    $.get('class|methodName', 
    { 
     parameter: value 
    }, 
    function(data) { 
     if (data) { 
     ... 
     } 
     else { 
     ... 
     } 
    }); 

    return false; 
    }); 
}); 

我知道你可以AJAX调用MVC控制器方法,但不幸的是我的遗产产品不使用MVC :-(

请告诉我有一种方法?

如果没有,有没有一种方法来调用映射到一个全球性的PHP函数?

回答

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(); 

你几乎想要做的ofcourse也可能是PARAMS一些过滤在htaccess/vhost中做一些很好的重写,这样你就可以使用像/ ajax/class/method之类的URL了......但是你得到了一般想法。你可能会想要一些有效的callbak注册表,所以你不只是调用任何有效的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 
}