2009-06-16 26 views
27

Se sto usando jQuery o JavaScript per fare un post, come posso renderlo un iframe target piuttosto che la pagina corrente?Indirizzare un iframe con un post HTML con jQuery

jQuery.post( 
    url, 
    [data], 
    [callback], 
    [type] 
) 

Questo è il formato del post jQuery, non sembra come se non v'è nessuna parte per specificare la destinazione che ci sia nel tag <form>.

Qualche idea?

risposta

5

Forse ti manca il punto di una richiesta AJAX - perché stai cercando di specificare il "target" di una richiesta asincrona? Questo non ha senso perché l'intero punto di AJAX è che la richiesta dal server viene rimandata al Javascript, senza ricariche di pagine o destinazioni HTML.

Se si voleva caricare il risultato della richiesta su un iframe, si potrebbe fare:

$.post('myurl', function(data) { 
    $('#myframe').html(data); 
}, 'html'); 
+7

Non mi importa di Ajax. Tutto quello che voglio è di inviare un post a un iframe al di fuori di esso senza che l'utente debba fare clic su un pulsante di invio. Non posso passarli nell'iframe usando src perché non è parametri querystring che vuole. Il tag

mi permette di fare esattamente quello che voglio, ma io sono su .net quindi tutto è contenuto all'interno di un tag form e non riesco a creare un nuovo tag form per me stesso con l'attributo di destinazione. Per qualche motivo non viene chiamato nulla quando utilizzo il codice che hai fornito. Ho provato a sostituire il # ("# myframe"). Html (dati); con avviso ("successo"); senza fortuna. – Matt

-1

Ti manca il punto di AJAX. Se vuoi pubblicare qualcosa su un iframe, puoi farlo con un semplice modulo, pubblicato da JavaScript o nel solito modo: un pulsante di invio.

30

È possibile farlo attraverso una forma regolare:

<form action="targetpage.php" method="post" target="iframename" id="formid"> 
    <input type="hidden" name="foo" value="bar" /> 
</form> 

È possibile quindi utilizzare jQuery per inviare il modulo:

$("#formid").submit(); 
+2

non si può fare questo con una forma, sono in .net e non si può avere una forma all'interno di un modulo – Matt

+4

è possibile utilizzare il modulo principale. cambia i valori di azione, target etc temporaneamente usando jquery e ripristinali dopo. – Josh

+0

ASP.NET MVC consente più moduli. Inoltre, penso che se hai reso il form in modo dinamico con jQuery, allora hai inviato quel modulo che ASP.NET non avrebbe soffocato. –

4

È possibile risolvere la non-forma-permesso-in-a -forma il problema creando dinamicamente il modulo e aggiungendolo al corpo. Così si farebbe qualcosa di simile:

$().ready(function() { 
    $('body').append('<form 
     action="url" 
     method="post" 
     target="iframename" 
     id="myspecialform"> 
     <input type="hidden" name="parameter" value="value" /> 
     </form>'); 
}); 

che crea la vostra forma iframe-aggiornamento al di fuori della forma principale che racchiude tutto il resto della pagina. Quindi chiamalo come consigliato da Josh: $('#myspecialform').submit();.

0

Ecco cosa ho fatto per risolvere il problema di avere un modulo all'interno di un modulo su una pagina asp.net quando ho avuto bisogno di inviare dati a una pagina remota tramite un modulo che utilizza idealmente AJAX/jQuery.

  1. ho creato le variabili per catturare il nome del modulo asp.net, bersaglio, azione, metodo, ecc

  2. Ho tenuto che le informazioni dal modulo in quelle variabili e poi cambiato la forma stessa usando jQuery per fare quello che mi serviva da fare.

  3. Quindi ho inviato il modulo tramite AJAX (perché avevo bisogno di un modulo per postare in modo dinamico una pagina separata in modo che l'altra pagina RICEVERE le informazioni).

  4. Infine, ho modificato il modulo asp.net in modo che il resto della pagina potesse funzionare correttamente.

Questo sembra aver risolto il mio bisogno di una soluzione simile.

3

So che questa domanda è vecchia, ma ecco come l'ho fatta su ASP.Net (C#) usando jQuery.

//Create the form in a jQuery object 
$("<form action='/FormPostTo.aspx' method='post' target='nameofframe'></form>") 
    //Get the value from the asp textbox with the ID txtBox1 and POST it as b1 
    .append($("<input type='hidden' name='b1' />").attr('value',$('#<%= txtBox1.ClientID %>').val())) 
    //Get the value from the asp textbox with the ID txtBox2 and POST it as b2 
    .append($("<input type='hidden' name='b2' />").attr('value',$('#<%= txtBox2.ClientID %>').val())) 
    //Add the form to the body tag 
    .appendTo('body') 
    //Submit the form which posts the variables into the iframe 
    .submit() 
    //Remove the form from the DOM (so subsequent requests won't keep expanding the DOM) 
    .remove(); 

Solo una breve nota: ho fatto i tag input del genere piuttosto che concatenare, nel caso in cui il valore della casella di testo ha avuto una citazione (') in esso. Se l'hai concatenato, questo avrebbe rovinato l'HTML e non sarebbe stato analizzato correttamente.

Inoltre, questo rimuove il modulo dal DOM dopo che è stato utilizzato in modo da non riempire il DOM con elementi di modulo se si inviano ai più volte iFrame.

Un leggero cambiamento che si potrebbe fare, sarebbe quello di creare l'elemento del modulo, se non esiste e poi basta fare riferimento a essa per ID se già esiste e riutilizzarla.

4

ecco come ho fatto in javascript con html semplice:

var form=$("<form/>").attr({ 
    method: "post", 
    action: "iframe.php", 
    target: "list_frame" 
}); 
form.append($("<input/>").attr({name:"field1",value:0})); 
form.append($("<input/>").attr({name:"field2",value:1})); 
form.append($("<input/>").attr({name:"field3",value:2})); 
form.append($("<input/>").attr({name:"field4",value:3})); 
form.append($("<input/>").attr({name:"field5",value:4})); 
$("body").append(form); 
form.submit(); 
+0

Se non si desidera utilizzare l'attributo 'bersaglio', il modulo può andare direttamente in iframe: $ ('# iframe list_frame') contenuto() trovare ('body') append (modulo);. ha funzionato per me in FF e Chrome –

Problemi correlati