¿Cómo vincular la variable a la solicitud jquery ajax?

Esto se explica por sí mismo:

while (...) {
    var string='something that changes for each ajax request.';
    $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'}).done(processData);
}
function processData(data) {
    // get string into here somehow.
}

Como puedes ver, necesito conseguir string dentro processData de algun modo. No puedo hacer una variable global porque string es diferente para cada solicitud de ajax. Entonces, la pregunta es, ¿cómo ato string a mi solicitud de ajax para que pueda acceder a ella desde processData?

Realmente no quiero tener que agregar string a la consulta y hacer que el servidor la devuelva, pero si esta es mi única opción, no tengo elección.

Gracias de antemano.

preguntado el 22 de mayo de 12 a las 17:05

3 Respuestas

intente de esta manera:

while (...) {

    var str = 'something that changes for each ajax request.';

    (function(_str) {
        $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'})
         .done(function(data) {
            processData(data, _str);
         });
    }(str));
}

function processData(data, str) {
  console.log(data, str);
}

y no se usaron variables globales :)

contestado el 22 de mayo de 12 a las 17:05

var string='something that changes for each ajax request.';
// Use a closure to make sure the string value is the right one.
(function() {
    // Store the "string" context
    var that = this;
    $.ajax({
        'type': 'GET',
        'dataType': 'json',
        'url': 'get_data.php'
    }).done(
        $.proxy( processData, that )
    );
}(string));

function processData( data ) {
    this.string === 'something that changes for each ajax request.' // true
}

$.proxy es la versión jQuery (navegador cruzado) de .bind().

Podría agregar un argumento como sugirió @Joel (en su respuesta eliminada), pero el menos argumentos mejor.

Respondido 12 Abr '17, 08:04

solo un pensamiento: si string es un valor que está cambiando dentro del while, ¿cómo puede estar seguro de pasar el derecho string valor para processData función (y no la última)? - Fabricio Calderan

Hm, supongo que usar un cierre para asegurarse de que esta sea la forma correcta. Editado, @F.Calderan. - florián margaine

$(document).bind("ajaxSend",function(){
    $("#ajax_preloader").show();
}).bind("ajaxComplete",function(){
    $("#ajax_preloader").hide();
});

contestado el 17 de mayo de 16 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.