2011-02-24 1 views
0

지금이 전화로 어려움을 겪었지만 지금은 제대로 작동하지 않습니다. dataToReturn은 여전히 ​​Error를 반환하고 호출 된 데이터는 반환하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?동의어 api Ajax call return

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

답변

0

AJAX 호출이 완료되기 전에 return dataToReturn 행이 실행 중이기 때문입니다. $.ajax에 전화 할 때 브라우저는 "알았어. 나는 그 말을 기다리는 동안 다음 단계로 넘어갈거야."라고 말했습니다.

이 문제를 해결하는 가장 간단한 방법은 dataToReturn으로 무엇을 하려는지 실제로 수행하도록 success 함수를 변경하는 것입니다. 그러나 이것이 실제로 가능하지 않다면, 더 많은 맥락이 더 나은 대답을 내놓는 데 도움이 될 것입니다.

+0

비동기가 "움직이는 일"이 일어나는 것을 막을 것이라고 생각했습니다. –

+0

@Mattias 반환 함수를 제거하고 성공 함수에서 'alert (dataToReturn)'를 호출하면 어떻게됩니까? – sdleihssirhc

+0

다음 문자열을 가져옵니다. 그러나 나는 그것을 돌려 보내야한다. 나는 이것을 시도하고있다 var wordObject = { 'words': get_synonyms (var)}; –