我想從onreadystatechange AJAX調用返回一個值...我發現這個網頁:stackoverflow link。我雖然我有它的工作,但意識到添加或刪除fn函數沒有區別。下面的代碼工作:從onreadystatechange返回值與回調
username_is_available();
function username_is_available() {
var username = document.getElementById('username').value;
get_data('username', username, function(returned_value) {
if (returned_value == 'true') {
document.getElementById('username_err').innerHTML = 'Taken';
} else {
document.getElementById('username_err').innerHTML = 'Available';
};
});
}
function get_data(data_type, data, fn) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
fn(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "availability.php?" + data_type + "=" + data, true);
xmlhttp.send();
}
這一切工作正常,但是這不是我的目標,我想一個函數username_is_available()如果用戶名確實可以返回true。 相反,在這裏我發生了一個動作(innerHTML被改變)。如果我嘗試在匿名函數中進行返回,則會得到與直接在onreadystatechange中返回結果相同的結果:var unasigned
對於那些即將點擊'重複線程'的人,此isn重複的。 我一直在它5小時以上
在你最後的例子中,我認爲'taken'應該是'available'。 –
您爲'taken'指定一個值並使用未聲明的變量'available'。變量名'taken'應該是'available',因爲它從一個函數中接收一個布爾值,其中包含短語'is_available'。 –
@PatrickRoberts良好的發現,我被抓住了第一個答案的嗡嗡聲,瘋狂地在文本框中編寫代碼,而不是像我平時所做的那樣編寫適當的編輯器和粘貼。謝謝! – Scott