2017-07-07 1 views

Répondre

1

Voici un exemple simple d'une demande de paiement ajax en utilisant ZF3. Vous pouvez essayer avec celui-ci. Dans cet exemple, nous utiliserions le module Application par défaut de ZF3.

Supposons que nous récupérions des données via un appel ajax à partir de l'URL suivante.

http://yoursite.com/title 

permet de créer une méthode d'action pour l'itinéraire title dans le IndexController.

public function titleAction() 
{ 
    // Initialize view 
    $view = new ViewModel(); 

    // Checks if this is a Javascript request 
    $xmlHttpRequst = $this->getRequest()->isXmlHttpRequest(); 

    if (! $xmlHttpRequst) { 
     die('Bad request'); 
    } 

    /** 
    * Here we may pull data from database but for tests 
    * here we make an array of titles for the view 
    */ 
    $titles = []; 
    for ($i = 0; $i < 10; $i++) { 
     $titles[] = "Lorem ipsum dolor {$i}"; 
    } 

    // Set data to be used in the view 
    $view->setVariable('titles', $titles); 

    /** 
    * Tell the renderer not to show the layout 
    * by setting setTerminal to true 
    */ 
    $view->setTerminal(true); 

    return $view;   
} 

Nous avons créé une méthode, nous avons besoin de créer un modèle de vue pour cela.

vue/application/index/title.phtml

<?php 
foreach ($titles as $title) { 
    echo '<h2>' . $title . '</h2>'; 
} 

Maintenant, nous créerions une autre méthode d'action dans le IndexController où nous faire l'appel ajax.

http://yoursite.com/text 

permet donc rendre cette méthode d'action aussi ...

public function textAction() 
{ 
    return new ViewModel(); 
} 
modèle

et vue serait comme si

vue/application/index/text.phtml

<h1>Handling ajax request</h1> 

<button onclick="showTitle()">Show Title</button> 

<div id="box"></div> 

<?php 
    // Set url 
    $url = $this->serverUrl('/title'); // http://yoursite.com/title 

    // This is for the "url" catch 
    echo "<script>" . PHP_EOL; 
    echo "\tvar url = '{$url}';" . PHP_EOL; 
    echo "</script>" . PHP_EOL; 
?> 

<script> 
    function showTitle() { 
     $.get(url, function(data){ 
      $('#box').html(data); 
     }) 
     .done(function(){ 
      console.log('Done!'); 
     }) 
     .fail(function(){ 
      console.log('Failed!'); 
     });  
    } 
</script> 

Ce script a besoin de la bibliothèque jQuery Javascript pour faire l'ajax appel. Assurez-vous donc que le script est ajouté dans votre vue/layout/layout.phtml.

La dernière chose dont nous avons besoin est de mettre en place des routes pour les /title et /text. Permet d'ajouter ces deux voies à la section de route du module/Application/config/module.config.php

'title' => [ 
    'type' => Literal::class, 
    'options' => [ 
     'route' => '/title', 
     'defaults' => [ 
      'controller' => Controller\IndexController::class, 
      'action' => 'title', 
     ], 
    ], 
], 
'text' => [ 
    'type' => Literal::class, 
    'options' => [ 
     'route' => '/text', 
     'defaults' => [ 
      'controller' => Controller\IndexController::class, 
      'action' => 'text', 
     ], 
    ], 
], 

Faites-nous savoir si elle vous rend heureux!

+0

cela a bien fonctionné mais je veux montrer l'exemple pour ajax je ne peux pas envoyer ou recevoir des données entre ajax et action –