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


¿Cómo debería pasar valores de cadena de consulta en una solicitud Ajax de jQuery? 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 donde los parámetros de cadena de consulta se pasan como una matriz, pero estos ejemplos que he visto no usan el modelo $.ajax(), en su lugar van directamente a $.get(). Por ejemplo:

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

Prefiero usar el $.formato ajax () como es a lo que estoy acostumbrado (no hay una razón particularmente buena - solo una preferencia personal).

Editar 09/04/2013:

Después de que mi pregunta fue cerrada (como "Demasiado Localizada") encontré una pregunta relacionada (idéntica) - con 3 votos positivos no menos (Mi mal por no encontrarla en primer lugar):

Usando jquery para hacer un POST, ¿cómo suministrar correctamente el parámetro' data'?

Esto respondió perfectamente a mi pregunta, descubrí que hacerlo de esta manera es mucho más fácil de leer y no necesito usar manualmente encodeURIComponent() en la URL o los DATOS valores (que es lo que encontré poco claro en la respuesta de bipen). Esto se debe a que el valor data se codifica automáticamente a través de $.param()). En caso de que esto pueda ser útil para cualquier otra persona, este es el ejemplo con el que fui:

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

    },
    error: function(xhr) {

    }
});
Author: Community, 2013-03-22

8 answers

Utilice la opción datos de ajax. Puede enviar el objeto de datos al servidor mediante la opción data en ajax y el type que define cómo lo está enviando (ya sea POST o GET). El tipo predeterminado es GET method

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 por

 $_GET['ajaxid'] //gives 4
 $_GET['UserID'] //gives you the sent userid
 214
Author: bipen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-12 23:26:11

Pon tus parámetros en la parte data de la llamada ajax. Véase los documentos. Así:

$.ajax({
    url: "/TestPage.aspx",
    data: {"first": "Manu","Last":"Sharma"},
    success: function(response) {
        //Do Something
    },
    error: function(xhr) {
        //Do Something to handle error
    }
});
 15
Author: Cianan Sims,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-08 07:45:43

Intenta agregar esto:

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

Depende de qué tipo de datos se espera, puede asignar html, json, script, xml

 2
Author: Jai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-22 17:42:49

La propiedad data le permite enviar una cadena. En su código del lado del servidor, acéptelo como un nombre de argumento de cadena "myVar" y luego puede analizarlo.

$.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
    }
});
 1
Author: Danwilliger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-22 17:37:42

Aquí está la sintaxis usando jQuery $.get

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

Así que 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)

Nota $.get no le da la oportunidad de establecer un manejador de errores. Pero hay varias maneras de hacerlo usando $.ajaxSetup(), $.ajaxError () o encadenar un .fail en su $.get como abajo

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

La razón para establecer el tipo de datos como 'jsonp' se debe a problemas de política del mismo origen del navegador, pero si solicitar 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 entonces consulte los documentos para $.ajax que permiten más flexibilidad

 1
Author: Damian Simon Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 02:25:44

Puedes usar el $.ajax(), y si no quieres poner los parámetros directamente en la URL, usa el data:. Que se adjunta a la URL

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

 0
Author: Sterling Archer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-22 17:36:57

Tuvo el mismo problema cuando especificé data pero el navegador estaba enviando solicitudes a la URL que termina con [Object object].

Deberías tener processData ajustado a true.

processData: true, // You should comment this out if is false or set to true
 0
Author: Webinan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-29 20:33:17

El parámetro de datos del método ajax le permite enviar datos al lado del servidor.En el lado del servidor puede solicitar los datos.Véase el código

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

En el lado del servidor recibirlo usando la variable $_GET.

$_GET['id'];

Aquí puede obtener un ejemplo.

 -1
Author: ujjal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 15:58:50