Cómo pasar parámetros en solicitudes GET con jQuery

Resuelto HeavenCore asked hace 11 años • 8 respuestas

¿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 datavalor 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) {

    }
});
HeavenCore avatar Mar 23 '13 00:03 HeavenCore
Aceptado

Utilice la opción de datos de ajax. Puede enviar un objeto de datos al servidor mediante la dataopción en ajax y typeque define cómo lo envía (ya sea POSTo GET). El tipo predeterminado es GETmé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(); 
bipen avatar Mar 22 '2013 17:03 bipen

Pon tus parámetros en la dataparte de la ajaxllamada. 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
    }
});
Cianan Sims avatar Mar 22 '2013 17:03 Cianan Sims

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 .failarchivo como $.getel 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, $.getconsulte los documentos que $.ajaxpermiten una mayor flexibilidad.

theterminalguy avatar Mar 29 '2018 02:03 theterminalguy