2009-06-16 8 views
27

Si j'utilise jQuery ou JavaScript pour faire un post, comment puis-je le faire cibler un iframe plutôt que la page en cours?Cibler un iframe avec un message HTML avec jQuery

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

C'est le format du poste jQuery, il ne semble pas qu'il y ait quelque part pour spécifier la cible comme il est dans la balise <form>.

Des idées?

Répondre

5

Vous avez peut-être manqué le point d'une requête AJAX - pourquoi essayez-vous de spécifier la "cible" d'une requête asynchrone? Cela n'a aucun sens car le but d'AJAX est que la requête du serveur soit renvoyée au Javascript, sans recharges de pages ni de destinations HTML.

Si vous voulez charger le résultat de la demande sur un iframe, vous pourriez faire:

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

Je ne me soucie pas vraiment ajax. Tout ce que je veux, c'est soumettre un post à un iframe depuis l'extérieur sans que l'utilisateur doive cliquer sur un bouton submit. Je ne peux pas les passer dans l'iframe en utilisant le src car ce ne sont pas les paramètres querystring qu'il veut. La balise

me permet de faire exactement ce que je veux, cependant je suis sur .net donc tout est contenu dans une balise de formulaire et je ne peux pas créer une nouvelle balise de formulaire pour moi avec l'attribut target. Pour une raison ou une autre, rien n'est appelé lorsque j'utilise le code que vous avez fourni. J'ai essayé de remplacer le # ("# myframe"). Html (données); avec alerte ("succès"); sans chance. – Matt

-1

vous manque le point d'AJAX. Si vous voulez poster quelque chose sur un iframe, vous pouvez le faire par un simple formulaire, posté par JavaScript ou de la manière habituelle: un bouton submit.

30

Vous pouvez le faire via une forme régulière:

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

Vous pouvez ensuite utiliser jQuery pour soumettre le formulaire:

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

ne peut pas le faire avec un formulaire, je suis sur .net et vous ne pouvez pas avoir un formulaire dans un formulaire – Matt

+4

vous pouvez utiliser votre formulaire principal. changez les valeurs d'action, de cible, etc. temporairement en utilisant jquery puis restaurez-les après. – Josh

+0

ASP.NET MVC permet plusieurs formes. En outre, je pense que si vous avez dynamiquement rendu le formulaire avec jQuery alors soumis que le formulaire ASP.NET ne serait pas étouffer. –

4

Vous pouvez résoudre le non-forme-permis-dans-un -former le problème en créant dynamiquement le formulaire et en l'ajoutant au corps. Donc, vous feriez quelque chose comme ceci:

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

Cela crée votre formulaire iframe-mise à jour à l'extérieur de la principale forme qui englobe tout le reste sur la page. Ensuite, appelez-le comme Josh recommandé: $('#myspecialform').submit();.

0

Voici ce que j'ai fait pour contourner la question d'avoir un formulaire dans un formulaire sur une page asp.net lorsque je devais soumettre des données à une page distante via un formulaire idéalement en utilisant AJAX/jQuery.

  1. J'ai créé des variables pour saisir le nom du formulaire de asp.net, cible, l'action , méthode, etc.

  2. je tenais cette information de la forme dans ces variables, puis a changé la forme elle-même en utilisant jQuery pour faire ce que j'avais besoin de faire.

  3. Ensuite, j'ai posté le formulaire via AJAX (parce que j'avais besoin d'un formulaire pour publier dynamiquement sur une page séparée afin que l'autre page pourrait obtenir l'info).

  4. Enfin, j'ai changé le formulaire asp.net en retour à la façon dont il était afin que le reste de la page puisse fonctionner correctement.

Cela semble avoir résolu mon besoin d'une solution similaire.

3

Je sais que cette question est ancienne, mais voici comment je l'ai fait sur ASP.Net (C#) en utilisant 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(); 

Juste un petit mot: je l'ai fait les balises d'entrée comme ça plutôt que de les concaténer, dans le cas où la valeur de la zone de texte avait une citation (') en elle. Si vous l'avez concaténé, cela gâcherait le code HTML et il ne serait pas analysé correctement.

En outre, cela supprime le formulaire du DOM après qu'il a été utilisé de sorte que vous ne remplissez pas le DOM avec des éléments de formulaire si vous postez plusieurs fois sur le iFrame.

Une légère modification que vous pourriez apporter serait de créer l'élément de formulaire s'il n'existe pas et de le référencer par ID s'il existe déjà et de le réutiliser.

4

voici comment je l'ai fait en javascript avec la version HTML brut:

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 vous ne voulez pas utiliser l'attribut 'target', le formulaire peut aller directement dans le iframe: $ ('iframe # list_frame'). Contents(). Find ('body'). Append (formulaire); travaillé pour moi dans FF et Chrome –

Questions connexes