我有試圖從以下面的方式呼叫功能捕獲返回值的函數:無法從JavaScript函數返回一個對象的值
var select = xhrRetrieve(projID);
這裏是xhrRetrieve函數的一個例子:
function xhrRetrieve(projID) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
var obj = $.parseJSON(xhr.responseText);
return obj.select.toString();
}
}
}
var url = "ajax.cgi";
var data = "action=retrieve-opp&proj-id=" + projID;
xhr.open("POST",url);
xhr.setRequestHeader("Content-Type","application/x-www-urlencoded");
xhr.send(data);
}
我正在使用jQuery結合直JavaScript。每當我嘗試使用得到obj.select值:
var select = xhrRetrieve(projID);
選擇總是回來undefined
。
我在做什麼錯?
沒有了'返回obj.select.toString();'內'xhr.onreadystatechange'實現這一目標? – daniel0mullins
不,只有當XHR事件被觸發時纔會發生。如果你想阻塞呼叫,你需要在調用xhr.send時設置async = false;或者更好地使用異步解決方案,比如Bjorn發佈的片段。 – Mikola