2013-07-15 51 views
-1

我想返回ajax調用的responsetext。我沒有成功,我得到的整個時間undefined:xmlhttp具有回調函數的請求

function ajaxFunction(callback,tekstvar){ 
    xmlhttp= new GetXmlHttpObject(); 
    if (xmlhttp==null) 
    { 
      alert ("Browser does not support HTTP Request"); 
      return; 
    } 
    var url="php/functions_translate.php"; 
    url=url+"?tekst="+tekstvar; 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
      return callback(xmlhttp.responseText) 
     }; 
    }; 

    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 

function translate(tekstvar) { 
    var text = ajaxFunction(function(tekst){return tekst;},tekstvar); 
    return text; 
} 

我打電話給翻譯功能給我一個單詞的某種翻譯。有誰知道,我做錯了什麼?

+0

什麼是你所得到的確切的錯誤?你用'console.log()'調試嗎? – samayo

+0

'回調'應該是一個函數 – 2013-07-15 23:18:07

+0

異步調用不能返回的東西! – epascarello

回答

0

我已經投票關閉這個由於重複。這個答案只是爲了讓重複問題中的答案與這個特定問題更相關。

請更多信息閱讀:Undefined return value from the function call Javascritpt


你需要一個回調添加到translate()功能:

function translate(tekstvar,callback) { 
    ajaxFunction(callback,tekstvar); 
} 

如果你希望調用translate這樣的:

var newtext = translate(text); 
displayText(newtext); 
doSomethingElseWith(newtext); 

然後我很抱歉,但這是不可能的與異步代碼。您需要將調用translate函數後寫入的所有代碼放入您傳遞給translate函數的回調函數中。

換句話說,修改它是這樣的:

var newtext = translate(text); 
// 
//--------------------------------------- move everything below this line 
//          into the callback 
displayText(newtext); 
doSomethingElseWith(newtext); 

,使它看起來像這樣:

translate(text,function(newtext){ 
    displayText(newtext); 
    doSomethingElseWith(newtext); 
});