Agregar iframe a DOM y asegurarse de que los contenidos se carguen antes de enviar el formulario

Tengo el siguiente código:

  function callIframe(type, cat) {
    var send = false;
    var axel = Math.random() + "";
    var a = axel * 10000000000000;
    var iframe = $('<iframe src="http://domain.com/;src=12345678;type=' + type + ';cat=' + cat + ';ord=' + a + '?" width="1" height="1" frameborder="0" ><iframe>');    
    $('body').append(iframe);   
  }          

y:

$("a").click(function(e){  
  var $form = $(this).parent();
  callIframe("signu903", "hptes318");  
  $form.get(0).submit();  
});           

Mi problema es que el formulario se envía antes de que el contenido del iframe esté completamente cargado. Sé que una devolución de llamada solucionaría este problema, pero luego dependo de la carga del iframe para enviar el formulario. Solo estoy buscando o las mejores prácticas en este caso.

Nota: no tengo acceso al código iframe.

Gracias por adelantado,

JN

preguntado el 22 de mayo de 12 a las 20:05

Creo que te estás contradiciendo. Desea asegurarse de que el formulario no se envíe hasta que se cargue el iframe, pero no desea confiar en la carga del iframe. -

@KevinB Estoy buscando una forma segura de enviar el formulario, incluso si el iframe no se carga. La aplicación no depende del iframe para ejecutarse. -

1 Respuestas

Intente usar un setTimeout de modo que esperará x segundos para que se cargue el iframe, y si no se carga en la cantidad de tiempo asignada, se envía de todos modos.

prueba esta función:

function callIframe(type, cat) {
    var send = false;
    var axel = Math.random() + "";
    var a = axel * 10000000000000;
    var iframe = $('<iframe src="http://domain.com/;src=12345678;type=' + type + ';cat=' + cat + ';ord=' + a + '?" width="1" height="1" frameborder="0" ><iframe>');
    $('body').append(iframe);
    return iframe;
}​

y luego este codigo

$("a").click(function(e) {
    var $form = $(this).parent();
    var iframe = callIframe("signu903", "hptes318");
    iframe.load($form.get(0).submit);
    setTimeout($form.get(0).submit,5000);
});​

Si el iframe tarda más de 5 segundos en cargarse, el formulario se envía de todos modos.

es posible que deba agregar más lógica para evitar que el envío se realice dos veces.

contestado el 22 de mayo de 12 a las 21:05

Gracias @Kevin B. Este es exactamente el tipo de solución que estaba buscando/pensando. Esto parece que asegurará que el formulario se envíe en cualquier caso. - Jeffreynolte

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.