2011-02-13 28 views
17

¿Cómo puedo devolver el valor "pinNumber" de jquery ajax para que pueda agregarlo fuera del ajax. Aquí está mi códigojQuery ajax valor de retorno

 
var x = pinLast + 1; 
    for(i=x;i<=pinMany;i++) { 
     var i = x++; 
     var cardNumber = i.toPrecision(8).split('.').reverse().join(''); 
     var pinNumber = ''; 

     jQuery.ajax({ 
      type: "POST", 
      url: "data.php", 
      data: "request_type=generator", 
      async: false, 
      success: function(msg){ 
       var pinNumber = msg; 
       return pinNumber; 
       //pin number should return 
      } 
     }); 

     jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+'
'); // the variable pinNumber should be able to go here }

favor pregúnteme si usted no entiende .. ^^ gracias

+3

Sin embargo, otro "¿Cómo puedo devolver los datos de una "función asincrónica". Este tipo de pregunta se hace con demasiada frecuencia. Votando para cerrar. –

+0

¡Cómo te atreves a hacer esta pregunta! Yo voto para eliminar a esta persona de la tierra. –

Respuesta

15

AJAX es asíncrona de forma predeterminada, no se puede devolver un valor desde la devolución de llamada sin hacer una llamada sincrónica, lo cual casi seguro que no quieres hacer.

Debe proporcionar una función de devolución de llamada real al controlador success:, y poner allí la lógica de su programa.

+0

oh muchas gracias ... ya tengo la idea ... :) poniendo mis varibles dentro del ajax y luego lo agrego en el interior. – Jorge

+0

Realmente no veo la necesidad de devolución de llamada en SYNC AJAX. –

+4

Sync Ajax es un oxímoron. Y sincronizar XHR apesta. – Quentin

4

Tiene que ver con variable scope. La variable local pinNumber que crea no es accesible fuera de su función de ajuste.

Quizás declare pinNumber en todo el mundo o si funciona bien, simplemente inserte su .append() dentro de su función de éxito.

+3

No tiene nada que ver con el alcance variable; el '.append' se está ejecutando antes de la devolución de llamada exitosa. – meagar

+2

'async' es falso, lo que significa que' .append' se ejecutará después de la llamada AJAX. – octopi

+0

OP no necesita declarar el 'pinNumber' globalmente, bastará con no utilizar la palabra clave' var' en la asignación dentro del controlador de éxito. La asignación afectará el alcance adjunto. – aaronasterling

5
var pinNumber = $.ajax({ 
    type: "POST", 
    url: "data.php", 
    data: "request_type=generator", 
    async: false 
}).responseText; 
jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+' '); 
+2

¡No utilices esto quienquiera que lea esto !!! ¡Esto está mal! ¡Nuestro programador ahora piensa que ajax funciona así! –

-2

Aquí está la solución simple.

//---------------------------Ajax class ------------------------------// 
    function AjaxUtil() 
    { 
      this.postAjax = function(Data,url,callback) 
      { 
       $.ajax({ 
       url: url, 
       async: true,  //must be syncronous request! or not return ajax results 
       type: 'POST', 
       data: Data, 
       dataType: 'json', 
       success: function(json) 
       { 
        callback(json); 
       } 
       }); 
      }//--end postAjax 
    } 
    //--------------------------------End class--------------------// 
    var ajaxutil = new AjaxUtil(); 

    function callback(response) 
    { 
      alert(response); //response data from ajax call 
    } 

    var data={}; 
    data.yourdata = 'anydata'; 
    var url = 'data.php'; 

    ajaxutil.postAJax(data,url,callback); 
+0

Su comentario sobre 'async: true' es simplemente mentir y envolver la devolución de llamada en otra función no tiene sentido. Además, esto es innecesario. ¿Qué tiene que ver con envolverlo en una clase con la pregunta? –

+0

Sin importar nada de eso, él es el único que dio un ejemplo apropiado del uso de 'success:'. La "respuesta" aceptada ni siquiera es una respuesta, ya que no da un ejemplo. –

3
var _successEvent = function(response){ 
    $('.pin_generated_table').append(cardNumber + ' = ' + response); 
}; 

$.ajax({ 
    type: "POST", 
    url: "data.php", 
    data: "request_type=generator" 
}).done(_successEvent); 
1

Puede utilizar este ejemplo:

window.variable = 'some data';

Esto hace que la variable global y se puede acceder a este desde cualquier lugar

+0

¿Pero cuándo sabrá el implementador cuándo se cambia el valor establecido para 'window.variable' y se puede acceder con el nuevo valor? – ojrask