web-dev-qa-db-fra.com

Comment passer des paramètres dans des requêtes GET avec jQuery

Comment dois-je transmettre les valeurs de chaîne de requête dans une requête Ajax jQuery? Je les fais actuellement comme suit, mais je suis sûr qu'il existe une méthode plus propre qui n'exige pas que je code manuellement.

$.ajax({
    url: "ajax.aspx?ajaxid=4&UserID=" + UserID + "&EmailAddress=" + encodeURIComponent(EmailAddress),
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});

J’ai vu des exemples où les paramètres de chaîne de requête sont passés sous forme de tableau, mais ces exemples n’utilisent pas le modèle $.ajax(), mais passent directement à $.get(). Par exemple:

$.get("ajax.aspx", { UserID: UserID , EmailAddress: EmailAddress } );

Je préfère utiliser le format $ .ajax () car c’est ce à quoi je suis habitué (pas de raison particulière - une préférence personnelle).

Edit 09/04/2013:

Après que ma question ait été fermée (en tant que "Too Localized"), j'ai trouvé une question connexe (identique) - avec 3 votes positifs non-moins (My bad pour ne pas l'avoir trouvée en premier lieu):

Utilisation de jQuery pour faire un POST, comment fournir correctement le paramètre «données»?

Cela répondait parfaitement à ma question. Je trouvais que le faire de cette façon était beaucoup plus facile à lire et je n’avais pas besoin d’utiliser manuellement encodeURIComponent() dans l’URL ou les valeurs de DONNÉES (ce que j’ai trouvé peu clair dans la réponse de bipen). En effet, la valeur data est codée automatiquement via $.param() ). Juste au cas où cela pourrait être utile à quelqu'un d'autre, voici l'exemple avec lequel je suis allé:

$.ajax({
    url: "ajax.aspx?ajaxid=4",
    data: { 
        "VarA": VarA, 
        "VarB": VarB, 
        "VarC": VarC
    },
    cache: false,
    type: "POST",
    success: function(response) {

    },
    error: function(xhr) {

    }
});
190
HeavenCore

Utiliser l'option de données de ajax. Vous pouvez envoyer un objet de données au serveur à l'aide de l'option data dans ajax et de la variable type qui définit la méthode d'envoi (POST ou GET). Le type par défaut est GET méthode

Essaye ça

$.ajax({
  url: "ajax.aspx",
  type: "get", //send it through get method
  data: { 
    ajaxid: 4, 
    UserID: UserID, 
    EmailAddress: EmailAddress
  },
  success: function(response) {
    //Do Something
  },
  error: function(xhr) {
    //Do Something to handle error
  }
});

Et vous pouvez obtenir les données par (si vous utilisez PHP)

 $_GET['ajaxid'] //gives 4
 $_GET['UserID'] //gives you the sent userid

En aspx, je crois que c'est (peut être faux)

 Request.QueryString["ajaxid"].ToString(); 
242
bipen

Placez vos paramètres dans la partie data de l'appel ajax. Voir les docs . Ainsi:

$.ajax({
    url: "/TestPage.aspx",
    data: {"first": "Manu","Last":"Sharma"},
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});
16
Cianan Sims

Voici la syntaxe utilisant jQuery $.get 

$.get(url, data, successCallback, datatype)

Donc, dans votre cas, cela équivaudrait à 

var url = 'ajax.asp';
var data = { ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress };
var datatype = 'jsonp';

function success(response) {
// do something here 
}

$.get('ajax.aspx', data, success, datatype)

Remarque$.get ne vous donne pas la possibilité de définir un gestionnaire d'erreurs. Mais il y a plusieurs façons de le faire en utilisant $ .ajaxSetup () , $ .ajaxError () ou en chaînant un .fail sur votre $.get comme ci-dessous 

$.get(url, data, success, datatype)
 .fail(function(){
})

La raison pour laquelle le type de données a été défini sur 'jsonp' est due aux mêmes problèmes de stratégie Origin, mais si vous faites la demande sur le même domaine que votre javascript, le type de données doit être défini sur json

Si vous ne souhaitez pas utiliser le code jquery $.get, alors reportez-vous à la documentation pour $.ajax, ce qui vous laisse davantage de flexibilité. 

4
theterminalguy

Essayez d'ajouter ceci:

$.ajax({
    url: "ajax.aspx",
    type:'get',
    data: {ajaxid:4, UserID: UserID , EmailAddress: encodeURIComponent(EmailAddress)},
    dataType: 'json',
    success: function(response) {
      //Do Something
    },
    error: function(xhr) {
    //Do Something to handle error
    }
});

Dépend du type de données attendu, vous pouvez affecter html, json, script, xml

2
Jai

La propriété data vous permet d'envoyer une chaîne. Sur le code côté serveur, acceptez-le en tant qu'argument de chaîne nommé "myVar" et vous pourrez ensuite l'analyser. 

$.ajax({
    url: "ajax.aspx",
    data: [myVar = {id: 4, email: 'emailaddress', myArray: [1, 2, 3]}];
    success: function(response) {
    //Do Something
    },
    error: function(xhr) {
    //Do Something to handle error
    }
});
1
Danwilliger

Vous pouvez utiliser $.ajax() et si vous ne voulez pas placer les paramètres directement dans l'URL, utilisez data: C'est ajouté à l'URL

Source: http://api.jquery.com/jQuery.ajax/

0
Sterling Archer

Avait le même problème où j'ai spécifié data mais le navigateur envoyait des demandes à l'URL se terminant par [Object object] 

processData doit être défini sur true

processData: true, // You should comment this out if is false or set to true
0
Webinan