これは私の問題です。ファイルを取得して内容を返す関数があるため、ホストプロバイダはPHPを使用できません。javascriptの匿名関数が変数を更新しない
function getStoryFromFile(file){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
return xhttp.responseText;
}
};
xhttp.open("GET", file, true);
xhttp.send();
}
そして、私は匿名関数がそのようには機能しないことを発見しました。それで、私はそれをそうすることによって動作させようとしました。
function getStoryFromFile(file){
var xhttp = new XMLHttpRequest();
var x = 'false';
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
x = 'true';
}
};
xhttp.open("GET", file, true);
xhttp.send();
if (x == 'true'){
return xhttp.responseText;
}
}
しかし、それもうまくいきませんでした。だから私は何時間もそれを微調整しようとしましたが、何も働いていません。私が得るすべては、「未定義」です。だから、誰かがJavascriptで2番目の方法でコンテンツを返すことができない理由、なぜjavascriptの開発者がそのような言葉を理解しにくい言語にしたのかを私に説明してください。ありがとうございました。
EDIT どのように変数に書き込むためのコールバック関数を取得しますか? 私が持っている:
function displayPage(){
file = 'story1.html' //Not actually like this in file, it changes based on database but i simplified it
var toHTML = '';
getStoryFromFile(file,function(text){
toHTML += text + "<br>";
});
document.getElementById('div').innerHTML = toHTML;
}
無名関数は、それがグローバルだにもかかわらず書き込みません。今の主な問題です
*「なぜjavascriptの開発者はこのような言葉を理解するのが難しいのですか」* - どのようなプログラミング言語でも、実際にはどのように動作するかを知るためには時間が必要です。あなたが持っている問題は、非同期関数、いくつかの他の言語には当てはまらない概念です。 – nnnnnn
[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)は新しい方法です... –
リンクされた重複した質問にはjQueryのコンテンツがありますが、非同期関数でこの問題をよく説明しており、いくつかのプレーンJavaScript(非jQuery)テクニックについてはカバーしていますが、[この回答](http://stackoverflow.com/a/16825593/615754)はすべてプレーンJavaScriptです。 [この質問](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron)には、いくつかの有用な情報がありますあなたのために。 – nnnnnn