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

252

Comment dois-je transmettre des valeurs de chaîne de requête dans une demande jQuery Ajax? Je les fais actuellement comme suit, mais je suis sûr qu'il existe un moyen plus propre qui ne nécessite pas que j'encode 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 que j'ai vus n'utilisent pas le $.ajax()modèle, au lieu de cela, ils vont directement $.get(). Par exemple:

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

Je préfère utiliser le format $ .ajax () car c'est à cela que je suis habitué (pas de raison particulièrement bonne - juste une préférence personnelle).

Modifier 09/04/2013:

Après que ma question a été fermée (comme "Trop localisée"), j'ai trouvé une question connexe (identique) - avec 3 votes positifs non moins (mon mal de ne pas l'avoir trouvée en premier lieu):

En utilisant jquery pour créer un POST, comment fournir correctement le paramètre 'data'?

Cela a répondu parfaitement à ma question, j'ai trouvé que le faire de cette façon est beaucoup plus facile à lire et je n'ai pas besoin d'utiliser manuellement encodeURIComponent()dans l'URL ou les valeurs DATA (ce que j'ai trouvé peu clair dans la réponse de bipen). En effet, la datavaleur est encodé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) {

    }
});
HeavenCore
la source
$ .get n'est qu'un raccourci pour $ .ajax
Denys Séguret
sauf que votre édition 09/04/2013 est une demande de publication :-) mais cela fonctionne apparemment de la même manière que GET.
commonpike

Réponses:

308

Utilisez l'option de données d'ajax. Vous pouvez envoyer un objet de données au serveur par dataoption dans ajax et typequi définit comment vous l'envoyez (soit POSTou GET). Le type par défaut est GETmé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(); 
bipen
la source
2
vous n'avez pas besoin encodeURIComponent. jquery le fera pour vous.
Lane
2
@KlwWallace Nope. Le PHP (côté serveur) dépend du langage côté serveur que vous utilisez. En PHP, c'est ainsi que nous obtenons les valeurs de get request.
bipen
1
@bipen. Bien reçu. J'ai supprimé mon commentaire afin de ne dérouter personne. THX.
Kirby L. Wallace
vous devez convertir l'objet en paramètres GET avec la fonction jQuery.param (), donc en utilisant jQuery, vous devez utiliser data:$.param({ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress}), au lieu dedata: { ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress }
Power Engineering
22

Mettez vos params dans la datapartie de l' ajaxappel. Voir les documents . Ainsi:

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

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 existe plusieurs façons de le faire en utilisant $ .ajaxSetup () , $ .ajaxError () ou en enchaînant un .failsur votre $.getcomme ci-dessous

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

La raison pour laquelle le type de données est défini sur `` jsonp '' est due aux mêmes problèmes de stratégie d'origine du navigateur, mais si vous effectuez la demande sur le même domaine où votre javascript est hébergé, vous devriez être d'accord avec le type de données défini sur json.

Si vous ne voulez pas utiliser le jquery $.getalors voir la documentation pour ce $.ajaxqui laisse de la place pour plus de flexibilité

theterminalguy
la source
4

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 attribuer html, json, script, xml

I have
la source
votre solution est utile, mais vous vous demandez comment définir la variable ( ID) avant de la passer en paramètre? J'ai Q sur SO, stackoverflow.com/questions/41192531/… . J'ai progressé sur ce Q beaucoup plus loin, où maintenant j'appelle une boîte de dialogue jquery et j'appelle ajax pour récupérer les données de mysql. Il me manque le lien sur la façon de récupérer l'ID unique associé à chaque clic de point de données . Appréciez si vous pouvez m'aider. Merci
user5249203
1

La propriété data vous permet d'envoyer une chaîne. Sur votre code côté serveur, acceptez-le comme un nom d'argument de chaîne "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
    }
});
Danwilliger
la source
1
Pourquoi le feriez-vous stringify? L' ajaximplémentation de jQuery s'en charge pour vous.
Steve
1

J'ai eu le même problème que celui que j'ai spécifié datamais le navigateur envoyait des demandes à l'URL se terminant par [Object object].

Vous auriez dû vous processDatamettre à true.

processData: true, // You should comment this out if is false or set to true
Webinan
la source
OMG, merci. Après 4 heures de recherche et d'essais, cela a finalement résolu un problème ici :-)
Kim K.
0

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

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

Sterling Archer
la source
-1

Le paramètre data de la méthode ajax vous permet d'envoyer des données côté serveur.Sur le serveur, vous pouvez demander les données.Voir le code

var id=5;
$.ajax({
    type: "get",
    url: "url of server side script",
    data:{id:id},
    success: function(res){
        console.log(res);
    },
error:function(error)
{
console.log(error);
}
});

Côté serveur, recevez-le en utilisant la variable $ _GET.

$_GET['id'];
ujjal
la source