2009-06-16 24 views
27

Si uso jQuery o JavaScript para hacer una publicación, ¿cómo puedo hacer que se oriente a un iframe en lugar de a la página actual?Segmentar un iframe con una publicación HTML con jQuery

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

Ese es el formato del puesto de jQuery, que no parece como si no hay ningún sitio para especificar el destino como la que hay en la etiqueta <form>.

¿Alguna idea?

Respuesta

5

Quizás esté perdiendo el sentido de una solicitud AJAX. ¿Por qué está tratando de especificar el "objetivo" de una solicitud asincrónica? Esto no tiene sentido ya que el objetivo de AJAX es que la solicitud del servidor se envíe de vuelta al Javascript, sin recarga de páginas o destinos HTML.

Si desea cargar el resultado de la solicitud en un iframe, es posible hacer:

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

Realmente no importa ajax. Todo lo que quiero es enviar una publicación a un iframe desde fuera sin que el usuario tenga que hacer clic en el botón Enviar. No puedo pasarlos al iframe utilizando el src porque no son los parámetros querystring lo que quiere. La etiqueta

me permite hacer exactamente lo que quiero, sin embargo estoy en .net así que todo está contenido dentro de una etiqueta de formulario y no puedo crear una nueva etiqueta de formulario para mí con el atributo de destino. Por alguna razón, nadie recibe llamadas cuando uso el código que me proporcionó. He intentado reemplazar el # ("# myframe"). Html (datos); con alerta ("éxito"); sin suerte – Matt

-1

Te estás perdiendo el punto de AJAX. Si desea publicar algo en un iframe, puede hacerlo mediante un formulario simple, publicado por JavaScript o de la manera habitual: un botón de envío.

30

Puede hacerlo a través de una forma regular:

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

continuación, puede utilizar jQuery para enviar el formulario:

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

no puede hacer esto con un formulario, estoy en .net y no puede tener un formulario dentro de un formulario – Matt

+4

puede usar su formulario principal. cambie los valores de acción, destino, etc. temporalmente usando jquery y luego restablézcalos después. – Josh

+0

ASP.NET MVC permite múltiples formularios. Además, creo que si dictó dinámicamente el formulario con jQuery, entonces envió ese formulario ASP.NET no se ahogaría. –

4

puede resolver el sin-forma-permitido dentro de una -formular el problema creando dinámicamente el formulario y anexándolo al cuerpo. Por lo que haría algo como esto:

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

que crea el formulario de iframe-actualización fuera de la forma principal que abarca todo lo demás en la página. Entonces simplemente llámalo como Josh recomendó: $('#myspecialform').submit();.

0

Esto es lo que hice para evitar el problema de tener un formulario dentro de un formulario en una página asp.net cuando necesitaba enviar datos a una página remota a través de un formulario idealmente usando AJAX/jQuery.

  1. creé variables para capturar el nombre del formulario asp.net, objetivo, acción, método, etc.

  2. Sostuve que la información de la forma en esas variables y luego cambió el propio formulario usando jQuery para hacer lo que necesitaba hacer.

  3. Luego publiqué el formulario a través de AJAX (porque necesitaba un formulario para publicar dinámicamente en una página separada, por lo que la otra página podría OBTENER la información).

  4. Finalmente, cambié el formulario asp.net de nuevo a la forma en que estaba para que el resto de la página pudiera funcionar correctamente.

Esto parece haber resuelto mi necesidad de una solución similar.

3

Sé que esta pregunta es antigua, pero así es como lo hice en 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(); 

Sólo una pequeña nota: me hicieron los tags de entrada como el que en lugar de la concatenación de ellos, en caso de que el valor del cuadro de texto tenía un presupuesto (') en ella. Si lo concatena, arruinaría el HTML y no se analizaría correctamente.

Además, esto elimina el formulario del DOM después de que se haya utilizado, de modo que no llene el DOM con elementos de formulario si lo publica varias veces en el iFrame.

Un pequeño cambio que podría hacer, sería crear el elemento de formulario si no existe y luego simplemente hacer referencia por ID si ya existe y reutilizarlo.

4

aquí es cómo lo hice en javascript con HTML plano:

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

Si no desea utilizar el atributo 'objetivo', el formulario puede ir directamente al iframe: $ ('iframe # list_frame'). Contents(). Find ('body'). Append (form); trabajado para mí en FF y Chrome –

Cuestiones relacionadas