Cómo pasar parámetros en solicitudes GET con jQuery
¿Cómo debería pasar valores de cadena de consulta en una solicitud jQuery Ajax? Actualmente los hago de la siguiente manera, pero estoy seguro de que hay una forma más limpia que no requiere que codifique manualmente.
$.ajax({
url: "ajax.aspx?ajaxid=4&UserID=" + UserID + "&EmailAddress=" + encodeURIComponent(EmailAddress),
success: function(response) {
//Do Something
},
error: function(xhr) {
//Do Something to handle error
}
});
He visto ejemplos en los que los parámetros de cadena de consulta se pasan como una matriz, pero estos ejemplos que he visto no usan el $.ajax()
modelo, sino que van directamente a $.get()
. Por ejemplo:
$.get("ajax.aspx", { UserID: UserID , EmailAddress: EmailAddress } );
Prefiero usar el formato $.ajax() ya que es a lo que estoy acostumbrado (no hay ninguna razón particularmente buena, solo una preferencia personal).
Editar 04/09/2013:
Después de cerrar mi pregunta (como "Demasiado localizada"), encontré una pregunta relacionada (idéntica), con 3 votos positivos nada menos (lo malo es que no la encontré en primer lugar):
Usando jquery para hacer una POST, ¿cómo proporcionar correctamente el parámetro de 'datos'?
Esto respondió perfectamente a mi pregunta, descubrí que hacerlo de esta manera es mucho más fácil de leer y no necesito usarlo manualmente encodeURIComponent()
en la URL o los valores de DATOS (que es lo que no encontré claro en la respuesta de bipen). Esto se debe a que el data
valor se codifica automáticamente mediante $.param()
). En caso de que esto pueda ser útil para alguien más, este es el ejemplo que utilicé:
$.ajax({
url: "ajax.aspx?ajaxid=4",
data: {
"VarA": VarA,
"VarB": VarB,
"VarC": VarC
},
cache: false,
type: "POST",
success: function(response) {
},
error: function(xhr) {
}
});
Utilice la opción de datos de ajax. Puede enviar un objeto de datos al servidor mediante la data
opción en ajax y type
que define cómo lo envía (ya sea POST
o GET
). El tipo predeterminado es GET
método
Prueba esto
$.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
}
});
Y puedes obtener los datos (si estás usando PHP)
$_GET['ajaxid'] //gives 4
$_GET['UserID'] //gives you the sent userid
En aspx, creo que sí (podría estar equivocado)
Request.QueryString["ajaxid"].ToString();
Pon tus parámetros en la data
parte de la ajax
llamada. Ver los documentos . Al igual que:
$.ajax({
url: "/TestPage.aspx",
data: {"first": "Manu","Last":"Sharma"},
success: function(response) {
//Do Something
},
error: function(xhr) {
//Do Something to handle error
}
});
Aquí está la sintaxis usando jQuery.$.get
$.get(url, data, successCallback, datatype)
Entonces, en su caso, eso equivaldría a,
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
no le brinda la oportunidad de configurar un controlador de errores. Pero hay varias formas de hacerlo, ya sea usando $.ajaxSetup() , $.ajaxError() o encadenando un .fail
archivo como $.get
el siguiente
$.get(url, data, success, datatype)
.fail(function(){
})
El motivo para configurar el tipo de datos como 'jsonp' se debe a problemas de política del mismo origen del navegador, pero si realiza la solicitud en el mismo dominio donde está alojado su javascript, debería estar bien con el tipo de datos establecido en json
.
Si no desea utilizar jquery, $.get
consulte los documentos que $.ajax
permiten una mayor flexibilidad.