var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
// console.log("xhr.readyState : " + xhr.readyState);
if (xhr.readyState === 4) {
// console.log("xhr.status : " + xhr.status);
if(xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
} else {
console.log(xhr.responseText);
}
}
};
xhr.open('GET', 'www.naver.com');
xhr.send();
var data = JSON.parse(xhr.responseText); <- 이부분을 다른 함수에서 사용하고 싶은데 어케 해야돼?
function a () {
var data = JSON.parse(xhr.responseText);
}
이런식으로...
시작한지 얼마 안돼서 모르겠다 몇시간째 하는중 ㅠㅠ
도와주셈..
33개의 댓글
무분별한 사용은 차단될 수 있습니다.
개또라이
대충 읽고 답함
var data = a();
function a(){
var result = blahblah~~;
return result;
}
우이에엥
잘 모루겠씁니다...
개또라이
아랫분 말은 전역변수 활용하란거고용
님이 원하는 질문의도를 제가 파악한 바로는
공통함수 생성 같아서 요래답함
키워드 전역변수,공통함수
우이에엥
찾아보겠읍니다!
짱구아빠
var data선언을 밖에서 해주면됨.
펑션 안에서선언된 변수라서 저기서만 쓰이는것.
밖에서 널값이든 임시값이든 넣고
펑션에서 가죠다쓰면뎀
우이에엥
var data;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
// console.log("xhr.readyState : " + xhr.readyState);
if (xhr.readyState === 4) {
// console.log("xhr.status : " + xhr.status);
if(xhr.status === 200) {
data = JSON.parse(xhr.responseText);
console.log(data);
} else {
console.log(xhr.responseText);
}
}
};
xhr.open('GET', 'www.naver.com');
xhr.send();
console.log(data);
이렇게 하니까 함수 안에 있는건 로그가 찍히는데 밖에 있는건 안찍힙니다.. ㅠㅠ
짱구아빠
함수 안에 if두개있는데 어디 타고있는지 확인.
제이슨 파스 하고있는데
데이터 변수가 값을 제대로 설정받고있는지 확인.
펑션 외부에서 선언된 변수가 정상적으로 펑션을 탔으면 값을 받는게맞음.
xhr.status가 200이 아니면 값을 못받으니 안찍는게 맞음
우이에엥
if문 안에 있는건 data 로그가 잘 찍히는데 밖에 있는건 xhr.status가 200이 아니라서 data를 못가져 온다는 말이신가요??
짱구아빠
if문에서 로그찍는게 두가지임.
status가 200이묜 json.parse를 타서 data를 출력하지만
아닌경우 data에대한 설정은 없고 xhr.리스폰스텍스트 만을 출력함.
해당 펑션을 정상적으로 탔더라도
status가 200이 아닐경우 ,data에대한 어떤 설정도없음. 선언만된 채로 값이없는상태.
1. if문에서 어디로 빠지는지 확인할것.
2. if문 어디서든 data값이 설정되도록 동일하게 적용할것.
개또라이
onreadystatechange는 비동기식이라서 그런거 아닌가 싶은데
onreadystatechange 에 객체상태값이 도달하는시간보다
아래 console.log가 먼저 실행되서 그럼
우이에엥
흠.. ㅠㅠㅠ
포스트스텐
자바스크립트 동기 비동기 처리 구글링 해봐 처음에는 꽤 어려움
개또라이
https://keichee.tistory.com/m/202
개또라이
동기식이란
var 주머니
주머니 = 돈
소매치기 결과 : 돈
비동기
var 주머니
주머니에 돈을 넣을려고 인출을 하고있는데~~~
소매치기당함
그결과 도둑놈손엔 들린게 없음
우이에엥
그렇다면 동기식으로 바꿔주거나 콜백함수로 넘겨줘야 하는 건가요 어렵네요ㅕ ㅠㅠㅠㅠㅠ
개또라이
네 정답입니다. 그러면댐
우이에엥
질문해도 될까요??
개또라이
자야하는디 뭐죠
우이에엥
댓글에 썼습니다
우이에엥
function baseData (callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
// console.log("xhr.readyState : " + xhr.readyState);
if (xhr.readyState == 4 && xhr.status === 200) {
// console.log("xhr.status : " + xhr.status);
var data = JSON.parse(xhr.responseText);
callback(data);
}
};
xhr.open('GET', '');
xhr.send();
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
var mainData = function (data) {
var bgImage = data.filePath.bgImage;
var homeEntity = data.homeEntity;
var divs = document.getElementsByClassName('entitybox');
function setBackgroundImg(background) {
var div = document.getElementById('mainview');
div.style.backgroundImage = "url('" + background + "')";
}
setBackgroundImg(bgImage);
for (var i=0; i < divs.length; i++) {
var entityImg = document.createElement('img');
entityImg.setAttribute('id', "homeEntity" + homeEntity[i].id);
entityImg.setAttribute('class', "homeEntity" + homeEntity[i].location);
entityImg.src = homeEntity[i].entityImage;
divs[i].appendChild(entityImg);
}
}
위에 링크랑 콜백이런거 찾아보고 해봤는데 지금 이상태에서 저기 비동기로 받아온 var data = JSON.parse(xhr.responseText);
callback(data); 이것을 mainData 함수에 가져가서 쓰고 싶읍니다...
뭔가 될거같은데 안됩니다... ㅠㅠㅠㅠㅠ
개또라이
일단 콜백 빼구요
손으로 그려주면 찬 간단할텐데 글로 설명하려니참...
xhr.onreadystatechange 이부분은 여기 소스상에 없다고 생각하면 되는 상태입니아
개또라이
그러니 var data 자체가 아예 생성이 안
된상태에요.
그상태에서 작업 다 돌리고 나면
그때서야 xhr.onreadystatechange 부분이 생성됨
우이에엥
그러면 저기서 var data = JSON.parse(xhr.responseText); 이부분을 다른 함수에서 사용하는게 불가능한건가요?
개또라이
음...
님 이거 도와주기 힘드네요
저도 개념이 한참 모자라지먼
이건 좀 너무 개념이 안잡혀잇어서
설명하기도 힘드네요.
전역변수 지역변수 변수 함수 파라미터 부터 개념이 안잡혀잇는거같음... ㅈㅅ 토낌
개또라이
물론 공부중이고 초반이니 이해는 하는데
이렇게 공부하시면 안되실거같아요.
다시 인강이라도 보고 새출발하세요
님이 보기엔 제가 런하는거 처럼 보일거에요
근데
정말 죄송하지만 이건 소스가 아님니다...
공부 열심히 하세요
우이에엥
감사합니다 ㅠㅠ
혼란의카오스
프레임워크 안씀?
우이에엥
바닐라만 연습해보는 중이라 ㅋㅋ 어제 다 했음 혼자
Tbps
var data = JSON.parse(xhr.responseText); 이걸 재사용할 수 있도록 하고 싶단건가?
아님 var data를 밖으로 빼내고 싶은거?
우이에엥
어제 혼자 다 했삼 ㄳㄳ
URA!!
function a (text) {
var data = JSON.parse(text);
}
****
if(xhr.status === 200) {
a(xhr.responseText);
}
하려는게 이거아냐?
우이에엥
그냥 콜백으로 빼면 되더라고여 자바스크립트 시작한지 며칠 안돼서 ㅠ
미제승냥이
var p = new Promise(resolve, reject){
....
resolve(xhr.responseText);
}
대충이렇게 만들어두고
var text = async func();
하면 text에 responseText 들어감