2009-11-10 24 views
13

Sé que puedo hacer una solicitud de publicación fuera de banda con jQuery y la sintaxis $.post(). Sin embargo, me interesa saber si es posible que jQuery cause una solicitud posterior en toda la página (como cuando se envía un formulario) para que se cargue una nueva página. es posible?

No hay ningún elemento de formulario en el DOM, por lo que no puedo hacer form.submit().

+0

¿Qué pasa con 'myFormElement. submit() '? O mejor aún, cuando el usuario hace clic en el botón Enviar, * simplemente deje que el navegador envíe el formulario *, no se necesita JavaScript. –

+0

Tenía la esperanza de poder hacer esto sin un formulario en el DOM (de la misma manera que puedo hacer una publicación fuera de banda sin un formulario en el DOM). Pero supongo que no. – UpTheCreek

+0

¿En realidad no tiene un elemento '

'? Deberías mencionar eso en la pregunta. –

Respuesta

0

No estoy seguro si me dieron su pregunta, pero si lo que desea es redirigir al cliente después de la publicación, simplemente dirigir al cliente en la función de devolución de llamada de la $ .post como

jQuery.post(url, {}, function() { location.href = "somewhere_else.html"; }) 
+1

Tipo de - lo que quiero decir es que, bajo una publicación de formulario normal, los parámetros de la publicación se envían al servidor, y el servidor responde con un documento html que reemplaza al actual. Me gustaría hacer lo mismo con JQuery (así que solo una publicación en el servidor, no una publicación y luego una publicación separada, como podría darme tu ejemplo, creo). – UpTheCreek

+0

¿Por qué no publica el formulario (sin javascript) en esa página y luego maneja la solicitud? :) - Marco 0 secs ago – Marco

+0

Porque no hay forma. – UpTheCreek

0

Creo que eres tratando de volver a implementar el comportamiento predeterminado. Simplemente use el mecanismo de envío regular que proporciona el navegador.

Si necesita verificar los datos antes de enviarlos al servidor, enlace una función al evento onsubmit y realice sus comprobaciones, luego interrumpa la acción submit devolviendo false o return true y deje que el navegador lo haga todo la obra. ¿Tiene sentido esto para ti?

0

He utilizado el siguiente ejemplo para permitir que varios botones para enviar datos de formulario en serie pero con diferentes opciones, por ejemplo, Guarde y guarde & Cerrar. Aunque estoy usando jQuery para publicar datos serializados, toda la página se vuelve a cargar porque estoy enviando los datos de la respuesta posterior ajax a "document.body".

<form id="myform"> 
<button id="button1" type="button" onclick="submitButton(true,false)" name="save" value="save">Save</button> 
<button id="button1" type="button" onclick="submitButton(true,true)" name="close" value="close">Save and Close</button> 
</form> 

function submitButton(save,close) { 
    $.ajax({url:'page.asp', data:''+$('#myform').serialize()+'&save='+save+'&close='+close+'', 
    type: 'post', 
    success: function(data){$(document.body).html(data);} 
    }); 
} 

No necesita un elemento de formulario, ya que puede usarlo con cualquier elemento que tenga una identificación única.

+0

También en respuesta al comentario "tan solo una publicación en el servidor, no una publicación y luego un envío por separado": este método lo consigue. –

21

puedo utilizar esta función cuando tenga que enviar los datos y no tengo forma en el DOM:

function postData(actionUrl, method, data) { 
    var mapForm = $('<form id="mapform" action="' + actionUrl + '" method="' + method.toLowerCase() + '"></form>'); 
    for (var key in data) { 
     if (data.hasOwnProperty(key)) { 
      mapForm.append('<input type="hidden" name="' + key + '" id="' + key + '" value="' + data[key] + '" />'); 
     } 
    } 
    $('body').append(mapForm); 
    mapForm.submit(); 
} 

Y lo llaman así:

var data= { 'property1': 666, 'property2': 'I am a boy' }; 
postData('http://urltopostdata.to', 'post', data); 
+2

Esto funcionó para mí. Gracias por usar .hasOwnProperty() para asegurarse de que estaba usando una propiedad del objeto de datos, no el prototipo (tuve que buscar por qué: http://stackoverflow.com/questions/684672/loop-through-javascript- objeto) –

Cuestiones relacionadas