2011-02-24 4 views
0

J'ai lutté avec cet appel pendant un certain temps maintenant, mais je ne peux pas le faire fonctionner. dataToReturn renvoie toujours Error et non les données appelées. Qu'est-ce que je fais mal?synonyme api Ajax appel retour

function get_translation(search) { 
    search = search.replace(/(<([^>]+)>)/ig, "").toLowerCase(); 
    original = search; 
    google.language.translate(original , 'en', 'sv', 
    function(result) { 
     translated = result.translation; 
     $("#results").html('<li class="ui-li-has-icon ui-li ui-li-static ui-btn-up-c" role="option" tabindex="0">'+ translated + '</li>') 
    }); 
}; 

function get_synonyms(items) { 



var dataToReturn = "Error"; 

$.ajax({ 
    url: 'http://words.bighugelabs.com/api/1/xxx/' + items+ '/json', 
    type: 'GET', 
    dataType: 'jsonp', 
    async: false, 
    cache: false, 
    success: function(data) { 

     dataToReturn = data; 
    } 
}); 


return dataToReturn; 

} 


$('#results').delegate("li", "tap", function(){ 
    myDate = new Date(); 
    displayDate = myDate.getDate() + "/" + myDate.getMonth()+1 + "/" + myDate.getFullYear(); 
    id = myDate.getTime(); 

    var wordObject = {'id' : id, 'date': displayDate, 'translated': translated, 'original': original, 'nmbr': "0", 'syn': get_synonyms('hello')}; 
    save_terms(wordObject); 
    loopItems() ; 
    $("#results").html(""); 
    $("#addField").val(""); 
    // location.reload(true); 
}); 

Répondre

0

Il est parce que la ligne est en cours d'exécution return dataToReturn avant l'appel AJAX est terminée. Lorsque vous appelez le $.ajax, le navigateur dit: «D'accord, je vais passer à la prochaine chose pendant que j'attends que ça me revienne.

La manière la plus simple de résoudre ce problème serait de changer la fonction success pour faire réellement tout ce que vous essayez de faire avec dataToReturn. Mais si ce n'est pas vraiment faisable, alors plus de contexte aiderait à trouver une meilleure réponse.

+0

Je pensais qu'async empêchait que "move on thing" se passe? –

+0

@Mattias Que se passe-t-il lorsque vous supprimez le retour et juste 'alert (dataToReturn)' dans la fonction de réussite? – sdleihssirhc

+0

alors je reçois la chaîne. Mais je dois le retourner. J'essaie cela var wordObject = {'words': get_synonymes (var)}; –