3 Stimmen

Aufrufen einer Klassenmethode mit jQuery AJAX?

Ich wechsle von der PHP AJAX-Bibliothek xajax zu jQuery AJAX.

Mit xajax könnte ich alle meine AJAX-Aufrufe innerhalb von Klassenmethoden enthalten, indem ich öffentliche Klassenmethoden an Javascript-Funktionsnamen binde (z. B. $this->registerFunction('javascriptFunctionName', &$this, 'classMethodName')).

Ich hoffe, es gibt eine Möglichkeit, wie ich etwas Ähnliches mit jQuery AJAX tun kann, wobei ich so etwas tun kann, wie dies:

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

    return false;
  });
});

Ich weiß, dass Sie AJAX-Aufrufe zu MVC-Controller-Methoden, aber leider mein Legacy-Produkt nicht verwenden MVC :-(

Bitte sagen Sie mir, dass es einen Weg gibt?

Wenn nicht, gibt es eine Möglichkeit, einen Aufruf einer globalen PHP-Funktion zuzuordnen?

3voto

prodigitalson Punkte 59250

Um Huckepack auf, was Lane ist sagen, Sie möchten vielleicht eine wirklich einfache Ajax-Controller und Routing alles, was es zu machen:

<?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 wollen einige Filterung auf die Parameter ofcourse zu tun und wahrscheinlich einige nette Rewriting in htaccess/vhost, so dass Sie Urls wie /ajax/class/method? verwenden können. Aber Sie bekommen die allgemeine Idee. Sie würden wahrscheinlich wollen, um irgendeine Art von gültige Callbak-Registrierung zu haben, so youre nicht nur Aufruf jede gültige php callable... das könnte gefährlich sein :-)

2voto

Lance Rushing Punkte 7340

Jquery schreibt nicht vor, wie sich Ihr Server (PHP) verhalten soll. Es macht nur eine xhr http-Anfrage an die URL, die Sie ihm geben. Sie müssen mit Ihrer eigenen Konvention zu kommen, wie Sie Ihren Server zu reagieren möchten.

In meinen PHP-Anwendungen prüfe ich normalerweise auf $_SERVER['HTTP_X_REQUESTED_WITH'] und behandle die Jquery-Anfrage dann wie jede andere Anfrage.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X