Foros del Web » Programando para Internet » PHP » Zend »

llamar a action desde javascript en la vista

Estas en el tema de llamar a action desde javascript en la vista en el foro de Zend en Foros del Web. Hola estoy intentado realizar una comprobación en un formulario antes de enviarlo, para ello tengo en mi formulario en la vista: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: ...
  #1 (permalink)  
Antiguo 24/07/2013, 06:28
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 6 años, 7 meses
Puntos: 0
llamar a action desde javascript en la vista

Hola estoy intentado realizar una comprobación en un formulario antes de enviarlo, para ello tengo en mi formulario en la vista:

Código HTML:
Ver original
  1. <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" onsubmit="return validateForm();" method="post"  >

En la misma vista tengo:


Código HTML:
Ver original
  1.     <script language="Javascript">
  2.  
  3.   function validateForm()
  4.   {
  5.     document.myform.action="<?php echo $this->url(array('controller' => 'cliente','action' => 'bdusuarios'));?>"
  6.   }
  7.  
  8. </head>

Y en mi action tengo:

Código PHP:
public function bdusuariosAction()
    {
                echo  
"<script>
                     alert('He entrado en el action');
                    </script>"
;
    } 
El problema es que al presionar el boton no me aparece el mensaje de alerta, ¿qué estoy haciendo mal?
Gracias
  #2 (permalink)  
Antiguo 24/07/2013, 07:56
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: llamar a action desde javascript en la vista

Que quieres hacer exactamente ?, lo que muestras para mi no tiene mucho sentido, quieres modificar el action del form , enviar un post a bdusuariosAction y luego ver el alert ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 24/07/2013, 08:19
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 6 años, 7 meses
Puntos: 0
Respuesta: llamar a action desde javascript en la vista

Lo que quiero es que cuando se pulse el botón submit del formulario se haga una comprobación antes de que se produzca el actión del form.

La comprobación (que es una consulta a la base de datos) la realizo desde el action bdusuarios. He puesto que aparezca un mensaje de alert para comprobar que funciona, pero después voy a modificar el código del action.

Si en function validateForm() en la vista muestro el mensaje de alert me aparece perfectamente antes de que se produzca el action del formulario
  #4 (permalink)  
Antiguo 24/07/2013, 09:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: llamar a action desde javascript en la vista

Para eso necesitas usar AJAX, lo que estas haciendo nunca te va a funcionar, lo que necesitas es hacer un request en segundo plano (usando AJAX) y en el response verificar tus resultados y proceder a enviar el form...
  #5 (permalink)  
Antiguo 25/07/2013, 12:18
 
Fecha de Ingreso: abril-2013
Mensajes: 82
Antigüedad: 6 años, 7 meses
Puntos: 0
Respuesta: llamar a action desde javascript en la vista

¿¿Quedaría algo así?? No tengo apenas idea de javascript ni de ajax...

En mi vista:

Código Javascript:
Ver original
  1. <head>
  2.     <script language="Javascript">
  3.  
  4.     function validateForm()
  5.   {
  6.           var ajax = $.ajax({
  7.              type: "GET",
  8.              url: "/asociacion/public/cliente/bdusuarios/fechaentrada/" + <?php echo $this->fechaentrada?>+"/fechasalida/"+<?php echo $this->fechasalida?>+"/idbungalow/"+ <?php echo $this->idbungalow?>+"/idcamping/"+ <?php echo $this->idcamping?>+"/fechahoy/"+ <?php echo $this->fechahoy?>,
  9.              async: true,
  10.              dataType: "json",
  11.              beforeSend: function(x) {
  12.                 if(x && x.overrideMimeType) {
  13.                    x.overrideMimeType("application/j-son;charset=UTF-8");
  14.                 }
  15.              },
  16.              success: function(data){
  17.                 if(data=="true"){
  18.                     alert('Lo sentimos ya han realizado la reserva con los criterios seleccionados');
  19.                          event.preventDefault();
  20.                          return false;
  21.                 }    
  22.              }
  23.         });
  24.   }
  25.  
  26. </script>
  27. </head>
  28.  
  29. <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" onsubmit="return validateForm();" method="post"  >

En mi controlador:

Código PHP:
public function bdusuariosAction()
    {
        
$reserva = new Application_Model_DbTable_Reserva();
        
$fechaentrada$this->_getParam('fechaentrada');
        
$fechasalida$this->_getParam('fechasalida');
        
$idbungalow$this->_getParam('idbungalow');
        
$idcamping$this->_getParam('idcamping');
        
$fechahoy$this->_getParam('fechahoy');

        
$yahayreserva $reserva->comprobarreservabungalow($fechaentrada$fechasalida$idbungalow$idcamping$fechahoy);
        
$result false;
        if(
count($yahayreserva)>0){
            
$result true;
        }
        
$this->_helper->json($result);
    } 

Lo que quiero es pasar una variable booleana y que javascript la compruebe.
si es true no quiero que se realize el action del form, y si es false sí que quiero que se realice el action.

Gracias por la ayuda.
  #6 (permalink)  
Antiguo 25/07/2013, 14:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: llamar a action desde javascript en la vista

No lo puedes poner en el onsubmit, porque AJAX por defecto se ejecuta en segundo plano, lo que deberías de hacer es que al presionar el botón, lance el request, y en el response, es donde haces el submit del formulario (en caso de que aplique).

Esto es algo independiente de Zend, te recomiendo te des una vuelta por el foro de Javascript para aprender un poco como hacerlo.

Saludos.

Etiquetas: javascript
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:01.