2012-11-23 2 views
1

J'essaie d'écrire un code universel pour AJAX. Je vais montrer ce que je veux dire sur l'exemple du panneau d'administration e-shops. Il y a des choses que nous pouvons éditer, par exemple: les catégories, les produits, les attributs. Chacun de ces éléments a ses formes avec des champs de saisie de texte et de saisie, etc. L'enregistrement va ressembler à Gmail, quand vous écrivez quelque chose dans le champ, il est automatiquement envoyé une requête au serveur. Pour chaque module (catégories, produits, attributs ...) j'ai un contrôleur et une action par exemple pour l'édition editAction, pour supprimer deleteAction etc. Il m'arrive d'avoir dans une vue plus d'une forme concernant les contrôleurs. Dans la mise en page principale, j'ai un code JS:Comment charger dynamiquement le contrôleur et l'action (Zend Framework + AJAX)?

$.ajax({ 
     url: 'http://localhost/fa.fronted/public/en/controller/action/', 
     type: 'POST', 
     data: 'websiteid='+iWebId+'&formid='+iFormId+'&formfieldid='+iFieldId+'&'+dataName+'='+dataValue, 
     success: function(data) { 
      if(data=='OK') { 
       $('#ajaxmessage').text('All changes saved'); 
      } 
      else{ 
       $('#ajaxmessage').text('Error: ' + data); 
      } 
     }, 
     error: function() { 
      $('#ajaxmessage').text('Error'); 
     } 
    }); 
} 

Je voudrais utiliser différentes adresses URL pour les différents contrôleurs et actions - je veux le faire ou de le gérer dynamiquement sous forme.

+4

S'il vous plaît terminer votre message avec une vraie question ou deux. Quel est votre problème, qu'avez-vous essayé, qu'est-ce qui n'a pas fonctionné? – markus

+0

Vous voulez une fonction Ajax à poster à tous les contrôleurs et l'URL devrait être la même pour tous les postes ...... non? –

+0

Si j'ai bien deviné, vous pouvez obtenir le contrôleur et le nom de l'action via la requête, créer un contrôleur parent, étendre tous les contrôleurs et dans preDispatch() vous pouvez définir des vues vars depuis $ this -> _ request-> getControllerName(), et getActionName, puis faire un appel de ce js avec le contrôleur et l'action comme arguments –

Répondre

1
function onChangeCallback(controller,action,formId){ 
    var data = getFormData(formId); 
    // or if you want to save by field $(this).val() will get you the input value 
    // make the ajax request from the code posted in your question 
} 

<input type="text" name="username" onchange="return onChangeCallback('<?=$this->ControllerName?>' 
,'<?=$this->actionName?>','myForm')" /> 
Questions connexes