2010-12-03 19 views
8

Je suis relativement nouveau à Jquery et je me demandais comment on pourrait poster des variables sur une autre page et ensuite rediriger? Je fonction ajax, la redirection fonctionne très bien, mais pas de variables sont capturées en POST (ils sont vides)Passer des variables avec POST à ​​une autre page avec Jquery

function linkWO() { 

    $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "LinkTagOut.aspx", 
      dataType: "json", 
      data: "{id=1}", 
      complete: 
      function() { 
       window.location = "LinkTagOut.aspx"; 
      } 

    }); 
} 

dans mon fichier ASPX

<a href="javascript:void(0);" onclick="return linkWO();"><span>Link</span></a> 
+0

gnomixa - Je suis peut-être loin de la base ici, mais il me semble que vous pourriez mal comprendre le but de l'appel ajax. Il semble que vous souhaitiez POSTER des valeurs sur une page, comme si vous soumettiez un formulaire (par opposition à un formulaire asynchrone, ce qui signifie que vous ne quittez pas votre page actuelle). Est-ce exact? – Ender

+0

oui, vous avez raison. est-ce possible sans soumettre de formulaire? – sarsnake

+0

j'ai mis à jour ma réponse, voir je pense que c'est ce que vous voulez faire – kobe

Répondre

2

Cette réponse est juste pour une solution rapide

pourquoi ne vous passez comme chaîne de requête ici

window.location = "LinkTagOut.aspx?variabletopass=test"; 
Code

du site jquery

<form id="target" action="destination.html"> 
    <input type="text" value="Hello there" /> 
    <input type="submit" value="Go" /> 
</form> 
<div id="other"> 
    Trigger the handler 
</div> 

$('#target').submit(function() { 
$ 

.post('ajax/test.html', function(data) {  
}); 
    return false; 
}); 
+0

comme une note: compte tenu de mon scénario, voir les commentaires ci-dessus, c'était la façon la plus appropriée de le faire. – sarsnake

+0

dans asp net normalement le formulaire soumet à sa page d'origine. C'est pourquoi j'ai choisi de passer les variables en utilisant querystring. Un, bien sûr, pourrait soumettre le formulaire à sa page, puis traiter les variables POSTed ici, puis rediriger vers destination.html. Mais j'ai choisi la voie facile. – sarsnake

3
$.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "LinkTagOut.aspx", 
     dataType: "json", 
     data: { id: 1 }, // or the string: 'id=1' 
     complete: 
     function() { 
      window.location = "LinkTagOut.aspx"; 
     } 

}); 

De l'$.ajax documentation (en option data) :

Données à envoyer au serveur. Il est converti en chaîne de requête , si ce n'est déjà une chaîne. Il est ajouté à l'URL pour les requêtes GET. Voir l'option processData pour empêcher ce traitement automatique . L'objet doit être paires clé/valeur. Si la valeur est un tableau, jQuery sérialise plusieurs valeurs avec la même clé en fonction de la valeur du paramètre traditionnel (décrit ci-dessous).

Aussi, assurez-vous de return false de la fin du gestionnaire soumettre (ou tout autre déclenche l'appel ajax) pour assurer qu'une redirection « normale » ne se produit pas.

+0

@karim quelle est la différence entre son code et votre code en dehors de hachage de données// – kobe

+0

ne fonctionne pas. essayé déjà. – sarsnake

+0

@gov - le paramètre data est la différence significative. Il doit être soit un objet ou une chaîne. Il passait un objet étrange qui ne fonctionnerait pas. – karim79

0

Jetez un oeil à l'option « données » sur cette page doc: http://api.jquery.com/jQuery.ajax/

Votre problème est que vous essayez de transmettre une chaîne JSON (et il est valide pour passer une chaîne), mais si vous passez une chaîne, jQuery attend une chaîne de requête paramétrée. Si vous voulez passer un objet json, ce ne devrait pas être une chaîne. Cependant, notez que les objets json passés de cette manière seront convertis en une chaîne de requête paramétrée par jQuery, donc si ce n'est pas gênant (comme dans ce cas, où vous avez seulement une valeur), vous pourriez tout aussi bien le passer de cette façon pour commencer et sauver le script du travail.

0

Si vous aimez moins de code faire ceci:

  1. inclure jquery.redirect.min.js dans votre dossier javascript (js).
  2. Charger le fichier script après chargement JQUERY:

    <script type='text/javascript' src='jquery.js'> 
    </script> 
    
    <script type='text/javascript' src='jquery.redirect.min.js'> 
    </script> 
    
  3. remplacent simplement les paramètres souhaités sur la ligne suivante (copier/coller) dans votre code javascript:

    $().redirect('targeturl.html', {'post_var_1': 'value1', 'post_var_2': 'value2'}); 
    

C'est le La méthode la plus simple et la plus rapide que j'ai trouvée pour poster des variables sur une autre page sans utiliser la balise de formulaire. Bonne chance!

+1

L'astuce du code dans une liste consiste à ajouter quatre espaces supplémentaires (8 espaces au total) pour le formater en tant que code. –