2017-01-03 1 views
0

Ich versuche, den Wert einer Variablen aus einem $ .get jquery Aufruf festzulegen, aber es funktioniert nicht. Unten ist mein Code

var uData = []; 
$('#tfriends').click(function() { 
    get_json(function() {      
     alert(uData); 
    }); 
}); 


function get_json(callback) { 
    $.get('url', function (data) { 
     var data = $.map(data.result, function (obj) { 
      obj.Id = obj.Id || obj.name; 
      obj.text = obj.text || obj.name; 
      return obj; 
     }, "json"); 
     uData = data; 
    }); 
} 
+1

Sie benötigen Rückruf anrufen (und übergeben Parameter) – SLaks

+1

1) Sie haben einen Syntaxfehler - ein zusätzliches '' ', das Sie sehen können, bringt die Syntaxhervorhebung durcheinander 2) Sie rufen' Callback' nirgendwo wirklich an. Fügen Sie 'callback()' nach dem Festlegen von 'uData' hinzu. –

+0

Bitte stellen Sie einen Beispielcode zur Verfügung, bin ein ziemlich Neuling in JavaScript. Danke –

Antwort

1

Sie sind nicht Ihre Callback-Funktion innerhalb der $.get Funktion aufrufen. Überprüfen Sie den Kommentar unten.

var uData = []; 
$('#tfriends').click(function() { 
    get_json(function() {      
     alert(uData); 
    }); 
}); 


function get_json(callback) { 
    $.get('url', function (data) { 
     var data = $.map(data.result, function (obj) { 
      obj.Id = obj.Id || obj.name; 
      obj.text = obj.text || obj.name; 
      return obj; 
     }, "json"); 
     uData = data; 
     callback() // this line will actually call your callback function 
    }); 
} 

bearbeiten
Wie @FelixKling unten vorgeschlagen, können Sie die Daten in den Callback übergeben sich nicht als so eine globale Variable deklarieren

// var uData = []; 
$('#tfriends').click(function() { 
    get_json(function (returned_data) {      
     alert(returned_data); 
    }); 
}); 


function get_json(callback) { 
    $.get('url', function (data) { 
     var data = $.map(data.result, function (obj) { 
      obj.Id = obj.Id || obj.name; 
      obj.text = obj.text || obj.name; 
      return obj; 
     }, "json"); 
     //uData = data; 
     callback(data) // this line will actually call your callback function 
    }); 
} 
+1

Besser noch: Übergeben Sie 'data' an' callback'. Es besteht keine Notwendigkeit für eine globale Variable. –

+0

@FelixKling Danke. die Antwort aktualisiert, um Ihren Vorschlag zu übernehmen. – Anubhav

+0

Danke, es funktioniert jetzt –

1

Dies würde (IMHO) besser mit Promises, Abstraktion der Abruf der Ressource, von der Vorverarbeitung, und dann von der anschließenden Appl ication Schicht Handhabung:

// resource retrieval 
function get_json() { 
    return $.get('url'); 
} 

// pre processing 
function preprocess(data) { 
    // no need to use `.map` since you're modifying the data in-place 
    data.result.forEach(function(obj) { 
     obj.Id = obj.Id || obj.name; 
     obj.text = obj.text || obj.name; 
    }); 

    return data.result; 
} 

// chaining it all together 
get_json().then(preprocess).then(callback); 

Wenn der Vorprozess Stufe immer erforderlich dann wäre es akzeptabel, dass in get_json zu übernehmen: ein

function get_json() { 
    return $.get('url').then(preprocess); 
} 
Verwandte Themen