일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 노드 삭제
- innerHTML
- HtmlElement
- HTTP
- debugging
- 자바스크립트
- element
- Servlet
- eventlistener
- 리다이렉트
- addEventListener
- 노드 replace
- 문자열
- 노드 객체
- javascript
- 노드 추가
- jsp내장객체
- 파이썬 코테
- 포워드
- 노드
- Object
- 이벤트 핸들러
- webprogramming
- Web
- 이벤트
- 코딩테스트
- 자바스크립트 이벤트
- backend
- Array
- HTML
- Today
- Total
seoyoung.dev
[setTimeout/setInterval, EventListener, Ajax통신, CORS란?] 본문
* setTimeout
setTimeout( function() { }, delay};
- 내부에 위치한 function은 '콜백함수' 로, 지연시간 뒤에 실행될 코드를 설정한다. ( 지연시간 : ms 단위)
- setTimeout 은 비동기로 실행되어, 동기적인 다른 실행이 끝나야 실행된다.
function run(){
console.log("run start");
setTimeout(function(){
var msg = "run run run ";
console.log(msg);
}, 2000);
console.log("run end");
}
-"run start", "run end" 실행 후, "run run run " 실행 된다.
* setInterval
setInterval( function() { ..}, delay);
- 이미지나 광고 등을 일정하게 정해진 시간 간격으로 바뀌게 적용하는 경우에 적합
+ setInterval 멈추기 : clearInterval
startAlert = function(){
playAlert = setInterval(
function(){
alert("http://dobbyisfree");}, 3000);
};
stopAlert = function(){
clearInterval(playAlert);
}
* DOM ( Document Object Model )
: 브라우저에서는 html 코드를 DOM 이라는 객체형태의 모델로 저장한다. 이렇게 저장된 정보를 DOM Tree 라고 한다.
-> 최상위 루트 : document >> 브라우저는 DOM Tree 를 찾고, 조작하는 걸 쉽게 도와주는 DOM API 를 제공한다.
- getElementById()
- Element.querySelector()
.. css selector 들을 많이 찾아보기
* Event 와 EventListener
- 브라우저가 이벤트 리스너를 호출할 때, 사용자로부터 어떤 이벤트가 발생했는지에 대한 정보를 담은
'이벤트 객체' 를 생성하여, 리스너 함수에 전달한다.
var el = document.querySelector(".outside");
el.addEventListener("click", function(e){
var target = e.target;
console.log(target.className, target.nodeName);
});
* Ajax 통신
- 서버로부터 데이터를 비동기로 가져오는것
- 웹에 데이터를 갱신할 때, 그때마다 서버에서 새로운 데이터를 만들어서 보여줘야 되니까 매번 새로운 페이지를 내려줘서 보여주는 방식이었는데, 필요한 부분만 데이터를 가져와서, 새로고침 없이 전체 웹페이지에서 일부분만 데이터를 갱신할 수 있게 한다.
function ajax(data){
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", function(){
console.log(this.responseText);
});
oReq.open("GET", "http://www.example.org/getData?data=data");
oReq.send();
}
: XMLHttpRequest 객체를 생성 - open 메소드로 요청 준비 - send 메소드로 서버에 보낸다.
서버에서 응답이오면, load 이벤트가 발생, 콜백함수 실행
--> 콜백함수가 실행될 때는 이미 ajax 함수는 반환하고, 콜 스택에서 사라진 상태 (setTimeout 함수랑 비슷 )
<article>
</article>
<input type="button" value="fetch" onclick=
"
fetch('html').then(function(response){
response.text().then(function(text){
document.querySelector('article').innerHTML = text;
})
})
">
: fetch api 에서 서버에 접속해서 해당 파일을 요청
-> 서버에 요청해서 'html' 이라는 파일을 요청
: 'article' 이라는 선택자에 우리가 알게된 'html' 내용을 innerHTML 한다.
* fetch ->> 페이지 안에서 특정한 부분으로 접속하고 싶을 때 : hash ( Bookmark )
특정 부분을 fragment, 특정 부분을 식별해줄 id 값을 fragment identifier 라고 한다.
location.hash 를 통해, 이 identifier 를 얻어낼 수 있게 된다.
이를 다른 태그에서 사용 가능
ex) <a href ="#!three">... //three : fragment identifier
<li><a href="#!html" onclick="fetchPage('html')">HTML</a></li>
<li><a href="#!css" onclick="fetchPage('css')">css</a></li>
<li><a href="#!javascript" onclick="fetchPage('javascript')">js</a></li>
if(location.hash){
fetchPage(location.hash.substr(2));
}
else{
fetchPage('WELCOME');
}
: 다른 사람에게 url 을 공유해서 똑같은 화면을 보고자 할 때 ,
location.hash 가 존재한다면 fetchPage 를 통해 해시값 전달 -> '#!...' 이므로 두번째 글자 부터 substring
// ajax 는 검색엔진 최적화가 잘 안된다. 최근에는 pjax 를 사용
* JSON
- 표준적인 데이터 포맷을 결정하기 위해서 JSON(JavaScript Object Notation) 포맷을 사용
* CORS 란 ? (Cross-Origin Resource Sharing)
위와 같이, XMLHttpRequest(XHR) 객체를 사용함으로써, 페이지 전체를 refresh하지 않고 데이터를 얻을 수 있게 되고, 이는 주로 ajax 통신에서 사용되는 방식이다.
처음 전송되는 리소스의 도메인과 다른 도메인으로부터 리소스가 요청될 경우, 해당 리소스는 cross-origin HTTP 요청에 의해 요청된다.
CORS 는 웹 서버에게 보안 cross-domain 데이터 전송을 활성화하는 cross-domain 접근 제어권을 부여한다.
따라서, 웹 브라우저가 사용하는 정보를 읽을 수 있도록 허가된 출처 집합을 서버에게 알려주도록 허용하는 HTTP 헤더를 추가함으로써 동작한다.
{ HTTPMethod("GET")} : 데이터를 가져오거나, { HTTPMethod("POST")} : 데이터를 서버로 보낸다.
* javascript Debugging
https://developers.google.com/web/tools/chrome-devtools/javascript/?hl=k
Chrome DevTools에서 자바스크립트 디버깅 시작하기 | Tools for Web Developers
Chrome DevTools의 이용 방법 및 자바스크립트 버그 수정 방법에 대해 알아봅니다.
developers.google.com
'WEB > Javascript' 카테고리의 다른 글
[javascript]- Location 객체/Navigator 객체/Window객체로 창 제어 (0) | 2019.10.20 |
---|---|
[javascript]-Object model 와 BOM객체 (0) | 2019.10.20 |
Hoisting/함수선언식과 표현식에서의 차이 (0) | 2019.10.02 |
javascript 기초 문법 (0) | 2019.09.17 |
Servlet/Lifecycle/Response-Request객체 활용 (0) | 2019.09.09 |