私が作成している私のXMLHttpRequestにこの問題があります。アイデアは、ループはJSONユーザーの配列をループし、そのプロファイルイメージを読み込むことを意味します。ユーザーを読み込むことは大丈夫ですが、プロファイル画像を取得するためにループすると、最後のユーザーに表示されます。Forループが動作しないXHR応答
問題がどこにあるのかはわかりますが、解決方法はわかりません。これをデバッグすると、xhr [i] .onload部分は実行されません。これは、ループの実行中にユーザーのIDに見つかったイメージを追加しようとしているため重要です。ループの最初の部分は、ユーザー名の 'img id = "username"を作成し、XHRリクエストを実行してイメージを取得し、それを' img id 'タグに追加します。
function parseJSON() {
console.log(jsonArrayOfUsers);
var htmlStart = '<ul class ="softwares">';
var htmlEnd = '</ul>'
var html = ''
var len = jsonArrayOfUsers.length;
for (var i = 0; i < len; i++) {
var xhr = [];
currentuser = jsonArrayOfUsers[i].username;
currentavatar = jsonArrayOfUsers[i].avatar
console.log(currentuser);
html += '<li class ="softwares">'
+ '<p><img id ="' + jsonArrayOfUsers[i].username + '" width="auto" height="100px"/></p>'
+ '<p>' + jsonArrayOfUsers[i].fullName + '</p>'
+ '<p>' + jsonArrayOfUsers[i].username + '</p>'
+ '<p>' + jsonArrayOfUsers[i].university + '</p>'
+ '<p>' + jsonArrayOfUsers[i].userType + '</p></li>';
(function (i){
if (jsonArrayOfUsers[i].avatar == null){}
else{
xhr[i] = new XMLHttpRequest();
xhr[i].open("GET", "URL TO API" + jsonArrayOfUsers[i].avatar, true);
xhr[i].setRequestHeader("Authorization", localStorage.token);
xhr[i].responseType = 'blob';
xhr[i].onload = function response(e) {
var urlCreator = window.URL || window.webkitURL;
imageUrl = urlCreator.createObjectURL(this.response);
document.querySelector("#" + currentuser).src = imageUrl;
};
xhr[i].send();
}})(i);
}
var htmlFull = htmlStart + html + htmlEnd
$('.people').append(htmlFull);
'あるCurrentUserの簡単なforeachループを使用して、このようにそれを解決しているだろう'はグローバル変数なので、' document.querySelector( "#" + currentuser) 'は' onload'関数が起動したときに同じ要素を参照します。これは 'for'ループの終了後になります。すでに変数 'i'を正しく扱っています。非常に同じIIFEを使用して、そこに追加のパラメータと引数として 'currentuser'(など)を入れてください。 – Xufox
それはうまくいった!ああ、そんなにお元気です!私がしたのは、currentuserをdocument.querySelector( "#" + jsonArrayOfUsers [i] .username).src = imageUrl;のjsonArrayOfUsers [i] .usernameに変更することでした。もう一度ありがとうございます。ところで、これを行うもっと効率的な方法はありますか(私はJSには初めてです)?私の要求に関しては、画像をロードするために認証が必要となるように自分のAPIを設定したのでヘッダーを設定する必要がありますが、実装が改善されていますか? –