2009-09-30 9 views
2

Je passe de la bibliothèque PHP AJAX xajax à jQuery AJAX. Avec xajax, je pourrais contenir tous mes appels AJAX dans les méthodes de classe en liant les méthodes de classe publique aux noms de fonction javascript (par exemple $ this-> registerFunction ('javascriptFunctionName', & $ this, 'classMethodName')).Appel d'une méthode de classe avec jQuery AJAX?

J'espère qu'il ya une façon que je peux faire quelque chose de similaire avec jQuery AJAX, par lequel je peux faire quelque chose comme ceci:

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

    return false; 
    }); 
}); 

Je sais que vous pouvez AJAX appels aux méthodes de contrôleur MVC, mais malheureusement, mon héritage produit ne pas utiliser MVC :-(

S'il vous plaît me dire il y a un moyen?

Sinon, est-il possible de mapper un appel à une fonction PHP globale?

Répondre

2

Pour se greffent sur ce chemin dit que vous voudrez peut-être faire un contrôleur ajax très simple et tout mettre en déroute à lui:

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

youd veulent faire du filtrage sur les params de ofcourse et probablement faites une bonne réécriture dans htaccess/vhost pour pouvoir utiliser des URLs comme/ajax/class/method? ... Mais vous avez l'idée générale. Vous voudrez probablement avoir une sorte de registre callbak valide pour que vous n'appeliez pas seulement un php valide ... cela pourrait être dangereux :-)

2

Jquery ne dicte pas comment votre serveur (PHP) devrait se comporter. Il fait juste une requête http xhr à l'URL que vous lui donnez. Vous devrez proposer votre propre convention sur la façon dont vous voulez que votre serveur réponde.

Dans mes applications PHP, je vérifie généralement $ _SERVER ['HTTP_X_REQUESTED_WITH'], puis gère la requête jquery comme toute autre requête.

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { 
    // handle ajax request 
}