2009-01-14 14 views
8

Me pregunto cómo puedo enviar un formulario a través de Ajax (usando prototipo de marco) y mostrar la respuesta del servidor en un div "resultado". El HTML es el siguiente:enviar un formulario a través de Ajax usando un prototipo y actualizar un resultado div

<form id="myForm" action="/getResults"> 
    [...] 
    <input type="submit" value="submit" /> 
</form> 
<div id="result"></div> 

Traté de adjuntar una función de JavaScript (que utiliza Ajax.Updater) a la forma "onsubmit" (en el formulario) y "onclick" (en la entrada), pero es aún "no Ajax" enviado después de que la función finaliza (por lo que toda la página se reemplaza por los resultados).

Respuesta

33

Echa un vistazo a las páginas de Prototype API en Form.Request y Event manejo.

Básicamente, si usted tiene esto:

<form id='myForm'> 
.... fields .... 
<input type='submit' value='Go'> 
</form> 
<div id='result'></div> 

Sus js serían, más o menos:

Event.observe('myForm', 'submit', function(event) { 
    $('myForm').request({ 
     onFailure: function() { .... }, 
     onSuccess: function(t) { 
      $('result').update(t.responseText); 
     } 
    }); 
    Event.stop(event); // stop the form from submitting 
}); 
+1

Creo que esta respuesta es mejor que la respuesta seleccionada porque de esta manera haces todo en el lado de Javascript. No hay ninguna adición onsubmit = "return myfunc()" al formulario – AntonioCS

+1

¡No podría estar de acuerdo que más separación sea vital! –

+1

N.B. - El prototipo no es compatible con el envío de archivos subidos a través de Ajax. Ver http://www.ruby-forum.com/topic/136931. – gatoatigrado

3

Debe devolver el valor falso de la función ajax, que bloquea el envío de formulario estándar.

<form id="myForm" onsubmit="return myfunc()" action="/getResults"> 


function myfunc(){ 
    ... do prototype ajax stuff... 
    return false; 

}

Usando onsubmit en el formulario también capta usuarios que envían con la tecla enter.

+0

Yo el "return false" en la función, pero me faltaba el regreso por encima de la función en onsubmit ... – Vinze

+0

haber hecho eso uno mismo unos cientos de veces;) – krosenvold

3

Primero necesita serialize your form, luego llame a Ajax Updater, usando POST options y páselo por los datos del formulario serializado. El resultado aparecerá en el elemento que se separó.

+0

La forma en que @Paolo dijo que ya serializa nuestro formulario y lo envía. –

Cuestiones relacionadas