2016-04-25 5 views
0

Ich habe einen Anruf Ajax wie folgt vor:Passing Wert von Zend-Controller und es in JS Antwort Holen

$.post("/user/signindo",{'username':username,"password":password},function(data) 
{ 
// this is what I would like to be able to have in my data object, to be able to access these properties and display them once response is there 
alert(data.id); 
alert(data.username); 
alert(data.firstname); 
} 

Und das ist meine Zend-Controller Aktion:

public function signindoAction() 
{ 
// doing something here with the values passed from the view 
} 

Die Aktion nicht braucht um im Grunde alles zurückzugeben, da es nur überprüft, ob die Login-Daten in Ordnung sind. Was ich jedoch hier tun muss, ist irgendwie in der Aktion zu sagen, dass, wenn die Antwort von Javascript zurückgegeben wird, dass es irgendwie die Daten holt, mit denen ich in der JS-Skriptdatei arbeiten muss. Wie kann ich das mit Zend Framework machen? Kann mir bitte jemand helfen?

+0

guys, anyone ??? – perkes456

Antwort

0

Zuerst müssen Sie das Layout als Antwort verbieten. Dazu setzen Sie den folgenden Code in Ihrer Methode Module::onBootstap():

public function onBootstrap(MvcEvent $e) 
{ 
    $sharedEvents  = $e->getApplication()->getEventManager()->getSharedManager(); 
    $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) { 
     $result = $e->getResult(); 
     if ($result instanceof \Zend\View\Model\ViewModel) { 
      // ban the layout only for ajax 
      $result->setTerminal($e->getRequest()->isXmlHttpRequest()); 
      // To ban the layout for all requests 
      // set true : $result->setTerminal(true); 
     } else { 
      throw new \Exception('SbmAjax\Module::onBootstap() the result isn't a \Zend\View\Model\ViewModel'); 
     } 
    }); 
} 

Dann in Ihrem Controller bauen die HTML-Antwort wie:

public function signindoAction() 
{ 
    // doing something here with the values passed from the view 
    return $this->getResponse()->setContent(Json::encode(array(
     'data' => ...something, 
     'success' => 1 
    ))); 
    // to handle errors return response with 'success' => 0 
} 

persönlich umfasst ich alle Ajax-Aktionen in einem bestimmten Modul mit als Einstellung für das gesamte Modul:

$result->setTerminal(true); 
+0

Gibt es einen einfacheren Weg, die ID vom Controller zur Ansicht zu übertragen? Vielleicht könnte ich es in die Session speichern und dann irgendwie von der .phtml-Datei aus zugreifen ??? – perkes456

+0

Durch. PHP-Datei erhalten Sie keine JS-Antwort. –