私は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();
}
それはすべてが正常に動作しますが、それが私の目標ではないですが、私は、ユーザー名が実際に利用可能である場合はtrueを返す関数username_is_availableを()したいと思います。 代わりに、ここで私はアクションが起こります(innerHTMLが変更されます)。そして、私が無名関数でリターンしようとすると、私はonreadystatechangeの中から直接返されたのと同じ結果になります:var unasigned
'duplicate thread'をクリックしようとしている人にとって、これはisn重複しない。 私は、ユーザー名が取られているかどうかを判断するためのプロセスが非同期であるため、単純に関数呼び出しからtrue
またはfalse
の値を返す方法はありません、少なくとも5時間残念なことに
あなたの最後の例では、 'taken'は' available'でなければならないと思います。 –
'taken'に値を割り当て、宣言されていない変数' available'を使用します。変数名 'taken'は' is_available'というフレーズを持つ関数からブール値を受け取っているので 'available'でなければなりません。 –
@PatrickRoberts良いキャッチ、私は通常のように適切なエディタと貼り付けではなく、テキストボックスに狂ってコードを書く、最初の話題に巻き込まれました。ありがとう! – Scott