Wie sollte 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 kodieren 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, bei denen Abfragezeichenfolgeparameter als Array übergeben werden, aber diese Beispiele verwenden nicht das Modell $.ajax()
, sondern gehen direkt zu $.get()
. Zum Beispiel:
$.get("ajax.aspx", { UserID: UserID , EmailAddress: EmailAddress } );
Ich ziehe es vor, das Format $ .ajax () zu verwenden, da ich es gewohnt bin (kein besonders guter Grund - nur eine persönliche Präferenz).
Edit 09/04/2013:
Nachdem meine Frage geschlossen war (als "Too Localized"), fand ich eine verwandte (identische) Frage - mit 3 Upvotes no-less (Mein schlechtes Verhalten, weil ich sie überhaupt nicht gefunden habe):
Wie kann man mit jquery einen POST erstellen?
Dies hat meine Frage perfekt beantwortet, ich fand, dass es auf diese Weise viel einfacher zu lesen ist und ich encodeURIComponent()
nicht manuell in der URL oder den DATA-Werten verwenden muss (was ich in der Antwort des Bipen unklar fand). Dies liegt daran, dass der data
-Wert automatisch über $.param()
) codiert wird. Für den Fall, dass dies für alle anderen nützlich 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) {
}
});
Verwenden Sie die Datenoption Ajax. Sie können das Datenobjekt über die Option data
in ajax und die Variable type
an den Server senden, die definiert, wie Sie es senden (entweder POST
oder GET
). Der Standardtyp ist GET
Methode
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 durch (wenn Sie PHP verwenden)
$_GET['ajaxid'] //gives 4
$_GET['UserID'] //gives you the sent userid
In aspx glaube ich, dass es ist (möglicherweise falsch)
Request.QueryString["ajaxid"].ToString();
Setzen Sie Ihre Parameter in den Teil data
des Aufrufs ajax
. Siehe die Dokumente . So wie:
$.ajax({
url: "/TestPage.aspx",
data: {"first": "Manu","Last":"Sharma"},
success: function(response) {
//Do Something
},
error: function(xhr) {
//Do Something to handle error
}
});
Hier ist die Syntax mit jQuery $.get
$.get(url, data, successCallback, datatype)
In Ihrem Fall würde das bedeuten,
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)
Note$.get
gibt Ihnen nicht die Möglichkeit, einen Fehlerbehandler festzulegen. Es gibt jedoch mehrere Möglichkeiten, dies zu tun, indem Sie $ .ajaxSetup () , $ .ajaxError () verwenden oder einen .fail
in Ihrem $.get
wie folgt verketten
$.get(url, data, success, datatype)
.fail(function(){
})
Der Grund für das Festlegen des Datentyps als 'jsonp' ist auf die gleichen Origin-Richtlinienprobleme des Browsers zurückzuführen. Wenn Sie jedoch die Anforderung an dieselbe Domäne richten, in der Ihr Javascript gehostet wird, sollten Sie den Datentyp auf json
setzen.
Wenn Sie die Jquery $.get
nicht verwenden möchten, sehen Sie siehe docs für $.ajax
, was Raum für mehr Flexibilität lässt
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 html, json, script, xml
zuweisen.
Mit der Eigenschaft data können Sie eine Zeichenfolge senden. Akzeptieren Sie den Code auf dem serverseitigen Code als Zeichenfolgenargumentname "myVar". Anschließend können Sie ihn 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
}
});
Sie können $.ajax()
verwenden. Wenn Sie die Parameter nicht direkt in die URL einfügen möchten, verwenden Sie data:
. Das wird an die URL angehängt
Hatte dasselbe Problem, wo ich data
angegeben habe, der Browser jedoch Anforderungen an die URL mit der Bezeichnung [Object object]
gesendet hat
Sie sollten processData
auf true
setzen.
processData: true, // You should comment this out if is false or set to true