2009-09-30 42 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 
}