Übergeben von Parametern in GET-Anforderungen mit jQuery

252

Wie soll ich Abfragezeichenfolgenwerte in einer jQuery Ajax-Anforderung übergeben? Ich mache sie derzeit wie folgt, aber ich bin sicher, dass es einen saubereren Weg gibt, bei dem ich nicht manuell codieren muss.

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

Ich habe Beispiele gesehen, in denen Abfragezeichenfolgenparameter als Array übergeben werden, aber diese Beispiele, die ich gesehen habe, verwenden nicht das $.ajax()Modell, sondern gehen direkt zu $.get(). Beispielsweise:

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

Ich bevorzuge das Format $ .ajax (), wie ich es gewohnt bin (kein besonders guter Grund - nur eine persönliche Präferenz).

Bearbeiten 09/04/2013:

Nachdem meine Frage geschlossen wurde (als "Too Localized"), fand ich eine verwandte (identische) Frage - mit nicht weniger als 3 Upvotes (mein schlechtes, weil ich sie überhaupt nicht gefunden habe):

Wie kann man mit jquery einen POST erstellen und den Parameter 'data' richtig angeben?

Dies beantwortete meine Frage perfekt. Ich fand, dass es viel einfacher zu lesen ist und ich es nicht manuell encodeURIComponent()in der URL oder den DATA-Werten verwenden muss (was ich in der Antwort von bipen als unklar empfunden habe). Dies liegt daran, dass der dataWert automatisch über codiert wird $.param(). Nur für den Fall, dass dies für andere von Nutzen sein kann, ist dies das Beispiel, mit dem ich gegangen bin:

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

    },
    error: function(xhr) {

    }
});
HeavenCore
quelle
$ .get ist nur eine Abkürzung für $ .ajax
Denys Séguret
außer, dein Edit 09/04/2013 ist eine Post-Anfrage :-) aber es funktioniert anscheinend genauso wie GET.
Commonpike

Antworten:

307

Verwenden Sie die Datenoption von Ajax. Sie können das Datenobjekt per dataOption in Ajax an den Server senden. Dabei wird typefestgelegt, wie Sie es senden (entweder POSToder GET). Der Standardtyp ist GETmethod

Versuche dies

$.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
  }
});

Und Sie können die Daten erhalten von (wenn Sie PHP verwenden)

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

In aspx glaube ich, dass es ist (könnte falsch sein)

 Request.QueryString["ajaxid"].ToString(); 
Bipen
quelle
2
du brauchst nicht encodeURIComponent. jquery erledigt das für Sie.
Lane
2
@KlwWallace Nein. Das ist PHP (Server-Seite), hängt davon ab, welche Servside-Sprache Sie verwenden. In PHP erhalten wir so die Werte von get request.
Bipen
1
@bipen. Verstanden. Ich habe meinen Kommentar gelöscht, um niemanden zu verwirren. Vielen Dank.
Kirby L. Wallace
Sie müssen das Objekt mit der Funktion jQuery.param () in GET-Parameter konvertieren. Verwenden Sie daher jQuery data:$.param({ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress})anstelle vondata: { ajaxid: 4, UserID: UserID, EmailAddress: EmailAddress }
Power Engineering
22

Fügen Sie Ihre Parameter in den dataTeil des ajaxAnrufs ein. Siehe die Dokumente . Wie so:

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

Hier ist die Syntax mit jQuery $.get

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

In Ihrem Fall wäre das also gleichbedeutend mit:

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)

Hinweis $.get bietet Ihnen nicht die Möglichkeit, einen Fehlerbehandler festzulegen. Aber es gibt mehr Möglichkeiten , um es entweder mit tun $ .ajaxSetup () , $ .ajaxError () oder einem Verkettungs .failauf $.getwie unten

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

Der Grund für das Festlegen des Datentyps als "jsonp" liegt in Problemen mit der gleichen Ursprungsrichtlinie des Browsers. Wenn Sie die Anforderung jedoch in derselben Domäne stellen, in der Ihr Javascript gehostet wird, sollte der Datentyp auf "OK" eingestellt sein json.

Wenn Sie die jquery nicht verwenden mögen , um $.getdann die Dokumentation sieht für $.ajaxden Raum für mehr Flexibilität erlaubt

der Terminalguy
quelle
4

Versuchen Sie Folgendes hinzuzufügen:

$.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
    }
});

Abhängig davon, welcher Datentyp erwartet wird, können Sie ihn zuweisen html, json, script, xml

Jai
quelle
Ihre Lösung ist hilfreich, aber Sie fragen sich, wie Sie die Variable ( ID) definieren können, bevor Sie sie als Parameter übergeben? Ich habe Q auf SO, stackoverflow.com/questions/41192531/… . Ich habe dieses Q viel weiter vorangetrieben, wo ich jetzt einen Abfragedialog aufrufe und Ajax aufrufe, um Daten von MySQL abzurufen. Mir fehlt der Link zum Abrufen der eindeutigen ID, die jedem Datenpunktklick zugeordnet ist . Schätzen Sie, wenn Sie mir helfen können. Vielen Dank
user5249203
1

Mit der Eigenschaft data können Sie eine Zeichenfolge senden. Akzeptieren Sie Ihren serverseitigen Code als String-Argumentnamen "myVar", und Sie können ihn dann analysieren.

$.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
quelle
1
Warum würdest du das tun stringify? Die ajaxImplementierung von jQuery erledigt das für Sie.
Steve
1

Hatte das gleiche Problem, wo ich angegeben habe, dataaber der Browser hat Anfragen an die URL gesendet, die mit endet [Object object].

Du hättest processDataeinstellen sollen true.

processData: true, // You should comment this out if is false or set to true
Webinan
quelle
OMG, danke. Nach 4 Stunden Suchen und Ausprobieren wurde hier endlich ein Problem behoben :-)
Kim K.
0

Sie können das verwenden $.ajax(), und wenn Sie die Parameter nicht direkt in die URL einfügen möchten, verwenden Sie das data:. Das ist an die URL angehängt

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

Sterling Archer
quelle
-1

Mit dem Datenparameter der Ajax-Methode können Sie Daten an den Server senden. Auf der Serverseite können Sie die Daten anfordern. Siehe 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);
}
});

Auf der Serverseite erhalten Sie es mit der Variablen $ _GET.

$_GET['id'];
ujjal
quelle