자신의 Ajax 웹 애플리케이션을 작성하여 발췌 한 것입니다. 여기에 제시된 세 장에서는 Ajax의 기본 사항에 대해 논의하고 XMLHTTPREQUEST의 멋진 세계를 탐구하기 전에 어떻게 진드기를 알 수 있습니다. 우리가 그것을 가지고 놀았고, 내부 작업을 탐색하고, 요청을하고, 응용 프로그램 페이지를 비동기로 업데이트 한 후, 우리는 첫 번째 True Ajax 응용 프로그램을 개발하기 시작합니다.
그것은 꽤 타고 갈 것입니다. 그래서 당신은 모험을 준비하기를 바랍니다! 이 장을 오프라인으로 읽으려면 .pdf 버전을 다운로드하십시오. 그러나 이제 Ajax에서 견고한 접지를 받으십시오
1 장. Ajax : 개요
객체 지향 프로그래밍을위한 JavaScript의 프레임 워크는 매우 가볍지 만, 일단 교수형을 얻으면 놀랍게도 잘 작동합니다. 상속 및 다형성과 같은 고급 객체 지향 기능은 JavaScript에서 사용할 수 없지만 AJAX 응용 프로그램의 클라이언트 측에서는 거의 필요하지 않습니다. 이러한 기능이 유용한 복잡한 비즈니스 논리는 항상 웹 서버에 있어야하며 xmlhttprequest 클래스를 사용하여 액세스해야합니다.
이 예에서는 하나의 속성 (메시지)과 하나의 메소드 (saymessage)가있는 helloworld라는 클래스를 만듭니다. 이 클래스를 사용하려면 다음과 같이 제작자 함수를 호출합니다.
여기에서는 Helloworld (HW라고 함) 인스턴스를 만든 다음이 개체를 사용하여 두 메시지를 표시합니다. 우리가 처음으로 Saymessage라고 부르면 기본값 "안녕하세요, 세계!" 메시지가 표시됩니다. 그런 다음 객체의 메시지 속성을 "Goodbye"로 변경 한 후 Saymessage라고 부르며 "Goodbye"가 표시됩니다.
이것이 현재 너무 의미가 없다고 걱정하지 마십시오. 우리가 Ajax 수업의 건물을 통해 진행함에 따라 더 명확해질 것입니다.
Ajax 클래스의 생성자 기능의 시작은 다음과 같습니다.
이 코드는 xmlhttprequest 객체와 함께 작동하기 위해 ajax 클래스에서 필요한 속성을 정의합니다. 이제 우리의 객체에 몇 가지 방법을 추가해 봅시다. 우리는 xmlhttprequest 객체를 설정하고 우리에게 요청하는 방법을 알려주는 몇 가지 기능이 필요합니다.
xmlhttprequest 객체 생성
먼저, 우리는 init 메소드를 추가하여 xmlhttprequest 객체를 생성합니다. 불행히도, Xmlhttprequest는 Firefox에서 약간 다르게 구현됩니다 (이 책에서는 Firefox에서 무언가가 어떻게 작동하는지 설명 할 때마다 Firefox, Mozilla, Camino 및 Seamonkey 및 Safari, Safari 및 Opera가 인터넷 익스플로러에있는 것보다 Firefox, Mozilla, Camino 및 Seakonkey를 포함한 모든 Mozilla 기반 브라우저를 언급하고 있습니다. 향후 Ajax 개발을 단순화하면 특정 브라우저를 타겟팅하지 않으면 여러 가지 방법으로 객체를 인스턴스화해야합니다. Firefox 및 Safari는 xmlhttprequest라는 클래스를 사용하여 xmlhttprequest 객체를 만듭니다. 인터넷 익스플로러 버전 6과 이전에는 Microsoft의 스크립팅 엔진에 내장 된 ActiveXobject라는 특수 클래스를 사용합니다. 이 클래스는 생성자가 다르지만 같은 방식으로 행동합니다.
2. URL -이 매개 변수는 요청중인 페이지를 식별합니다 (또는 메소드가 게시되는 경우에 게시 됨).
교차 도메인
일반 브라우저 보안 설정을 사용하면 HTTP 요청을 다른 도메인으로 보낼 수 없습니다. 예를 들어, ajax.net에서 제공되는 페이지는 사용자가 그러한 요청을 허용하지 않는 한 Remotescripting.com에 요청을 보낼 수 없습니다.
3. 비동기 플래그 -이 매개 변수가 true로 설정되면 요청에 대한 응답을 기다리는 동안 JavaScript가 정상적으로 계속 실행됩니다. 요청 상태가 변경됨에 따라 요청의 변경 상태를 처리 할 수 있도록 이벤트가 해고됩니다.
매개 변수를 False로 설정하면 응답이 서버에서 돌아올 때까지 JavaScript 실행이 중지됩니다. 이 접근법은 콜백 함수를 사용하는 것보다 조금 더 간단한 이점이 있습니다. 코드에서 요청을 보내고 나면 응답을 바로 처리 할 수 있지만 큰 단점은 서버에서 요청을 보내고 처리하는 동안 코드가 일시 중지되고 응답이 수신된다는 것입니다. 서버와 비동기 적으로 통신하는 능력이 Ajax 응용 프로그램의 요점이므로, 이는 true로 설정해야합니다.
.
Ajax 클래스에서 메소드 및 비동기 속성은 합리적인 기본값 (get and true)으로 초기화되지만 항상 대상 URL을 설정해야합니다.
OnreadyStateChange 이벤트 핸들러 설정
http 요청이 서버에서 처리되면 진행 상황은 ReadyState 속성에 대한 변경으로 표시됩니다. 이 속성은 요청 시작부터 마무리까지 순서대로 나열된 다음 상태 중 하나를 나타내는 정수입니다.
0 : 비 초기화 - 오픈은 아직 호출되지 않았습니다
1 :로드 - Send는 아직 호출되지 않았습니다.
2 :로드 - Send가 호출되었지만 응답은 아직 사용할 수 없습니다.
3 : 대화식 - 응답이 다운로드되고 응답 텍스트 속성은 부분 데이터를 보유합니다.
4 : 완료 - 응답이로드되고 요청이 완료되었습니다.
xmlhttprequest 객체는 ReadyStateChange 이벤트를 발사하여 각 상태 변경에 대해 알려줍니다. 이 이벤트의 핸들러에서 요청의 ReadyState를 확인하고 요청이 완료되면 (즉, ReadyState가 4로 변경 될 때) 서버의 응답을 처리 할 수 있습니다.
Ajax 코드의 기본 개요는 다음과 같습니다.
우리는“응답을 처리하기 위해 일을하는 방법”을 조금만 논의 할 것입니다. 지금은 요청이 전송되기 전에이 이벤트 핸들러를 설정해야한다는 점을 명심하십시오.
요청을 보내
XMLHTTPREQUEST 클래스의 보내기 메소드를 사용하여 와 같이 http 요청을 시작하십시오.
보내기 메소드는 하나의 매개 변수를 취하며 게시물 데이터에 사용됩니다. 요청이 현재 요청과 같이 서버에 데이터를 전달하지 않는 간단한 GET 일 때이 매개 변수를 NULL로 설정합니다.
범위 손실과 이것
OnreadyStateChange가 이상한 변수 할당이 포함되어 있음을 알 수 있습니다.
이 새로운 변수 인 자체는 비동기 이벤트 처리기를 사용하는 JavaScript 개발자가 종종 경험하는 "스코프 손실"이라는 문제에 대한 솔루션입니다. 비동기 이벤트 핸들러는 일반적으로 xmlhttprequest와 함께 사용되며 settimeout 또는 setInterval과 같은 함수와 함께 사용됩니다.
이 키워드는 객체 지향 JavaScript 코드의 속기로 사용되어 "현재 객체"를 참조하십시오. 다음은 빠른 예입니다. Scopetest라는 클래스 :
이 코드는 Scopetest 클래스의 인스턴스를 생성 한 다음 해당 객체의 DOTEST 메소드를 호출하여 "Scopetest의 인사말!"메시지를 표시합니다. 단순 해요?
이제 Scopetest 클래스에 간단한 xmlhttprequest 코드를 추가해 봅시다. 웹 서버의 홈페이지에 대한 간단한 GET 요청을 보내고 응답이 접수되면 this.message and self.message의 내용을 표시합니다.
그렇다면 어떤 메시지가 표시됩니까? 답은 그림 2.1에 표시되어 있습니다
우리는 Self.message가 우리가 기대하는 인사말 메시지이지만, 이에 무슨 일이 있었는지 message? 키워드를 사용하여“이 코드를 실행하는 객체”를 참조하는 편리한 방법입니다. 그러나 이것은 하나의 작은 문제가 있습니다. 그 의미는 물체 외부에서 호출 될 때 변경됩니다. 이것은 실행 컨텍스트라고 불리는 결과입니다. 객체 내부의 모든 코드는 동일한 실행 컨텍스트에서 실행되지만 이벤트 처리기와 같은 다른 객체에서 실행되는 코드는 호출 객체의 실행 컨텍스트에서 실행됩니다. 이것이 의미하는 바는 객체 지향 JavaScript를 작성할 때이 키워드를 사용하여 이벤트 핸들러 코드의 객체를 참조 할 수 없다는 것입니다 (위의 OnreadyStateChange와 같이). 이 문제를 범위 손실이라고합니다
이 개념이 아직 100% 명확하지 않다면 너무 걱정하지 마십시오. 다음 장에서는이 문제에 대한 실제 시연이 보일 것입니다. 그 동안 코드 예제에서 변수 자체가 보이면 스코프 상실 문제를 처리하는 것이 포함되어 있음을 명심하십시오. .
<.> 그림 2.1. Scopetest 클래스로 표시된 메시지
응답 처리
이제 우리는 HTTP 요청에 대한 서버의 응답을 처리하기 위해 코드를 작성할 준비가되었습니다. 우리가 OnreadyStateChange 이벤트 핸들러에 남겨둔“응답을 처리하기위한 것”주석을 기억하십니까? 우리는 그 일을 할 코드를 썼을 때입니다! 함수는 세 가지 작업을 수행해야합니다. 응답이 오류인지 아닌지 알아냅니다.
원하는 형식으로 응답을 준비하십시오
원하는 핸들러 함수에 대한 응답을 전달하십시오
ajax 클래스의 내부 기능에 아래 코드를 포함시킵니다.
응답이 완료되면 xmlhttprequest 오브젝트의 상태 속성에서 요청이 성공했는지 여부를 나타내는 코드가 반환됩니다. 상태 속성에는 완료된 요청의 HTTP 상태 코드가 포함됩니다. 요청 된 페이지가 누락 된 경우 코드 404, 서버 측 스크립트에서 오류가 발생한 경우 500, 요청이 성공한 경우 200 등이 있습니다. 이 코드의 전체 목록은 HTTP 사양 (RFC 2616)에 제공됩니다.
숫자가 좋지 않습니까?
코드를 기억하는 데 어려움이있는 경우 걱정하지 마십시오. 오류에 대한 좀 더 자세한 내용을 알려주는 짧은 메시지가 포함 된 Statustext 속성을 사용할 수 있습니다 (예 : "찾을 수 없음", "내부 서버 오류", "OK").
.
우리의 ajax 클래스는 서버의 응답을 세 가지 형식으로 제공 할 수 있습니다. 정상적인 JavaScript 문자열, W3C XML dom을 통해 액세스 할 수있는 XML 문서 개체 및 요청을하는 데 사용 된 실제 XMLHTTPREQUEST 객체로서의 응답을 제공 할 수 있습니다. 이들은 텍스트, XML 또는 객체로 설정할 수있는 ajax 클래스의 응답 성분에 의해 제어됩니다. 응답 내용은 XMLHTTPREQUEST 객체의 두 속성을 통해 액세스 할 수 있습니다.
responeetext -이 속성에는 서버의 응답이 일반 문자열로 포함됩니다. 오류의 경우 웹 서버 오류 페이지 HTML이 포함됩니다. 응답이 반환되는 한 (즉, ReadyState가 4가됩니다),이 속성은 데이터가 포함되지만, 기대하는 것은 아닐 수도 있습니다.
responsexml -이 속성에는 XML 문서 개체가 포함되어 있습니다. 응답이 XML이 아닌 경우이 속성은 비어 있습니다.
ajax 클래스는 응답 특성을 텍스트로 초기화하므로 기본적으로 응답 핸들러가 서버의 컨텐츠를 JavaScript 문자열로 전달됩니다. XML 컨텐츠로 작업하는 경우 ResponseFormat 속성을 XML로 변경하여 대신 XML 문서 개체를 꺼낼 수 있습니다.
정말 공상을 원할 경우 사용할 수있는 옵션이 하나 더 있습니다. 실제 XMLHTTPREQUEST 객체 자체를 핸들러 기능으로 반환 할 수 있습니다. 이를 통해 상태 및 Statustext 속성과 같은 것들에 직접 액세스 할 수 있으며 특정 클래스의 오류를 다르게 처리하려는 경우 유용 할 수 있습니다. 예를 들어 404 오류의 경우 추가 로깅을 완료합니다.
올바른 컨텐츠 유형 설정
모든 주요 브라우저에서 XMLHTTPREQUEST 구현을 사용하려면 응답을 XML로 처리하려면 HTTP 응답의 컨텐츠 유형을 올바르게 설정해야합니다. 컨텐츠 유형의 텍스트/XML (또는 응용 프로그램/XML 또는 Application/XHTML XML)으로 반환 된 잘 형성된 XML은 XMLHTTPREQUEST 객체의 응답 XML 속성을 올바르게 채 웁니다. 비 XML 컨텐츠 유형은 해당 속성에 대해 NULL 또는 정의되지 않은 값을 초래합니다.
그러나 그러나 Firefox, Safari 및 Internet Explorer 7은 XML 문서에 대한 XMLHTTPREQUEST의 선택에 관한 방법을 제공합니다. 우리의 간단한 ajax 클래스 클래스는 setMimeType 메소드를 사용하여 이것에 연결됩니다 :
이 메소드는 MimeType 속성을 설정합니다
그런 다음 Doreq 메소드에서는 시도 내에서 ResidentemimeType를 호출합니다.
웹 애플리케이션의 전면 및 후면 끝을 모두 제어 할 수없는 환경에서는 비협조적인 서버에서 컨텐츠 유형 헤더를 무시할 수있는 것이 매우 중요 할 수 있습니다. 오늘날의 많은 앱 액세스 서비스 및 많은 이질적인 도메인 또는 소스의 컨텐츠에 액세스하기 때문에 특히 그렇습니다. 그러나이 기술은 Internet Explorer 6 또는 Opera 8에서 작동하지 않으므로 오늘날 응용 프로그램에서 사용하기에 적합하지 않을 수 있습니다.
응답 핸들러
HTTP 1.1 사양에 따르면, 200에서 299 사이의 코드가있는 응답은 성공적인 응답입니다. 우리가 정의한 OnreadyStateChange 이벤트 핸들러는 상태 속성을보고 응답 상태를 얻습니다. 코드가 성공적인 응답을 위해 올바른 범위 내에있는 경우 OnreadyStateChange 이벤트 핸들러는 응답 핸들러 메소드 (handleresp 속성에 의해 설정됨)에 대한 응답을 전달합니다.
응답 핸들러는 물론 응답이 무엇인지 알아야하므로 응답을 매개 변수로 전달합니다. 우리는이 과정이 나중에 행동하는 것을 볼 것입니다.
핸들러 메소드가 사용자 정의이므로 코드는 메소드가 메소드를 실행하려고하기 전에 메소드가 올바르게 설정되었는지 확인하기 위해 CURSORY 검사를 수행합니다.
오류 핸들러
상태 속성에 요청에 오류가 있음을 나타내는 경우 (즉, 200 ~ 299 코드 범위 외부) 서버의 응답은 HonderERR 속성의 오류 핸들러로 전달됩니다. Ajax 클래스는 이미 오류 핸들러에 대한 합리적인 기본값을 정의하므로 호출하기 전에 정의 할 필요가 없습니다.
handleerr 속성은 다음과 같이 보이는 함수를 가리 킵니다.
이 메소드는 팝업이 차단되지 않았는지 확인한 다음 새 브라우저 창에 서버 오류 페이지 컨텐츠의 전체 텍스트를 표시하려고합니다. 이 코드는 시도를 사용합니다. 캐치 블록을 사용하므로 사용자가 팝업을 차단 한 경우 컷 다운 버전의 오류 메시지를 표시하고보다 자세한 오류 메시지에 액세스하는 방법을 알려줄 수 있습니다.
이것은 최종 사용자에게 정보를 적게 보여주고 싶을 수도 있지만, 이것은 편집증 수준에 달려 있습니다. 자신의 사용자 정의 오류 핸들러를 사용하려면 Sethandlererr를 사용할 수 있습니다.
또는 하나의 진정한 핸들러
단일 함수를 사용하여 성공적인 응답과 오류를 모두 처리 할 수 있습니다. Ajax 클래스의 편의 방법 인 Sethandlerboth는 이것을 쉽게 설정합니다.
Sethandlerboth로 매개 변수로 전달 된 모든 함수는 성공적인 응답과 오류를 모두 처리합니다.
이 설정은 클래스의 응답 속성을 객체로 설정하는 사용자에게 유용 할 수 있습니다. 이는 ResponseText 또는 Responsexml 속성의 값이 아니라 요청을 만드는 데 사용되는 xmlhttprequest 객체를 유발합니다. 응답 핸들러에게 전달됩니다.
요청을 중단하는
때때로, 자신의 경험에서 알 수 있듯이 웹 페이지는로드하는 데 오랜 시간이 걸립니다. 웹 브라우저에는 중지 버튼이 있지만 Ajax 클래스는 어떻습니까? 이곳은 Abort 방법이 작동하는 곳입니다 :
이 메소드는 OnreadyState 이벤트 핸들러를 빈 함수로 변경하고 XMLHTTPREQUEST 클래스의 인스턴스에서 ABORT 메소드를 호출 한 다음 생성 한 인스턴스를 파괴합니다. 이렇게하면 중단되는 요청을 위해 독점적으로 설정된 속성이 재설정됩니다. 다음에 요청이 이루어지면 init 메소드가 호출되고 해당 속성이 재 구체화됩니다.
그렇다면 왜 OnreadyState 이벤트 핸들러를 변경해야합니까? XMLHTTPREQUEST의 많은 구현이 중단되면 요청 상태가 변경되었음을 나타냅니다. 더 나쁜 것은 이러한 이벤트가 4 인의 ReadyState가 완성된다는 것입니다. 이는 예상대로 완성 된 모든 것이 완료되었음을 나타냅니다 (부분적으로는 사실입니다. 분명히, 우리는 요청을 중단 할 때 응답 핸들러가 호출되기를 원하지 않으므로 중단을 호출하기 직전에 기존 핸들러를 제거합니다.
.
랩핑
지금까지 우리가 가지고있는 코드를 감안할 때, ajax 클래스는 요청을하기 위해 두 가지만 필요합니다.
대상 url
응답 의 처리기 기능
DOGET라는 메소드를 제공 하여이 두 속성을 모두 설정하고 요청을 시작하겠습니다.
두 개의 예상 매개 변수와 함께 URL 및 핸드와 함께이 함수에는 세 번째 매개 변수 : 형식이 있음을 알 수 있습니다. 이것은 핸들러 기능으로 전달되는 서버 응답 형식을 변경할 수있는 선택적 매개 변수입니다.
형식 값을 전달하지 않으면 Ajax 클래스의 응답 성분이 텍스트 값으로 기본값을 제공하므로 핸들러는 responseText 속성의 값을 전달합니다. 대신 XML 또는 객체를 형식으로 전달할 수 있습니다. 이는 응답 핸들러로 전달되는 매개 변수를 XML DOM 또는 XMLHTTPREQUEST 객체로 변경할 수 있습니다.
예 : 간단한 테스트 페이지
이것은 ajax 클래스의 인스턴스를 생성하여 fakeserver.php라는 페이지에 간단한 요청을 만들고 결과를 텍스트로 핸드 함수로 전달합니다. Fakeserver.php가 사용하려는 XML 문서를 반환 한 경우 다음과 같이 할 수 있습니다.
이 경우 SomePage.php가 실제로 유효한 XML을 제공하고 콘텐츠 유형 HTTP 응답 헤더가 Text/XML (또는 적절한 다른)로 설정되었음을 절대적으로 확신하고 싶습니다.
.
페이지 만들기
이제 우리는 Ajax 객체를 만들고 요청에 대한 간단한 핸들러 기능을 설정 했으므로 이제 코드를 작동시킬 차례입니다.
가짜 서버 페이지
위의 코드에서 요청의 대상 URL이 fakeserver.php라는 페이지로 설정되어 있음을 알 수 있습니다. 이 데모 코드를 사용하려면 동일한 PHP 지원 웹 서버에서 ajaxtest.html 및 fakeserver.php를 모두 제공해야합니다. 간단한 ASP로 IIS 웹 서버에서이를 수행 할 수 있습니다. 가짜 서버 페이지는 아래의 PHP 코드를 사용하여 웹 서버의 다양한 응답 시간을 시뮬레이션하는 초기 페이지입니다.
var hw = new HelloWorld(); <br>
hw.sayMessage(); <br>
hw.message = 'Goodbye'; <br>
hw.sayMessage();
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
그것은이 작은 코드 스크랩입니다. 3 초에서 12 초 사이에 기다린 다음 인쇄합니다.
fakeserver.php 코드는 텍스트/일반에 대한 응답의 컨텐츠 유형 헤더를 설정합니다. 전달되는 페이지의 내용에 따라 응답을 위해 다른 컨텐츠 유형을 선택할 수 있습니다. 예를 들어, XML 문서를 발신자에게 전달하는 경우 자연스럽게 Text/XML을 사용하고 싶을 것입니다.
아래 코드에서 알 수 있듯이 일부 기능 (예 : Sleep)은 쉽게 사용할 수 없지만 ASP에서도 잘 작동합니다.
이 책 전체에서 모든 서버 측 예제는 PHP로 작성되지만 ASP, ASP.NET, Java, Perl 또는 웹 서버를 통해 콘텐츠를 제공 할 수있는 모든 언어로 쉽게 쓸 수 있습니다.
.
setMimeType 메소드 를 사용하십시오
XML로 구문 분석하려는 유효한 XML 문서가 포함되어 있다고 알고있는 응답이 있다고 상상해보십시오. 그러나 서버는 텍스트/평원으로서 귀하에게 제공해야합니다. SetMimeType에 추가 호출을 추가하여 Firefox 및 Safari에서 해당 응답을 XML로 구문 분석 할 수 있습니다.
자연스럽게, 서버의 응답이 유효한 XML인지 확인하는 경우에만이 접근법을 사용해야하며 브라우저가 Firefox 또는 Safari인지 확인할 수 있습니다.
페이지를 치는 페이지
이제 진실의 순간이 온다! 로컬 웹 서버를 치고 ajaxtest.html을로드하고 얻는 것을 확인하십시오. 모든 것이 제대로 작동하는 경우 몇 분의 지연이 발생하면 그림 2.2의 표준 자바 스크립트 경보가 표시됩니다.
<.> 그림 2.2. Ajax 클래스가 예상
로 작동하고 있음을 확인합니다 이제 모든 것이 좋고 Ajax 클래스가 제대로 작동하고 있으므로 다음 단계로 이동해야 할 때입니다.
.
예 : 간단한 ajax app
알겠습니다. 그래서 Ajax의 멋진 힘을 사용하여 "OK"를 읽는 작은 작은 JavaScript 경보 상자를 스폰하는 것은 아마도이 책을 구입했을 때 염두에 두었던 것이 아닙니다. 이 xmlhttprequest를 좀 더 유용하게 만드는 예제 코드의 변경 사항을 구현하겠습니다. 동시에이 장의 시작 부분에서 언급 한 간단한 모니터링 응용 프로그램을 만들 것입니다. 앱은 웹 사이트를 핑하고 응답을받는 데 걸리는 시간을보고합니다.
기초를 놓는
우리는 라이브러리가 포함 된 두 개의 javaScript 파일 인 ajax.js와 응용 프로그램의 코드가 포함 된 appmonitor1.js로 연결되는 간단한 HTML 문서로 시작합니다.
페이지 본문에 내용이 거의 없다는 것을 알 수 있습니다. 단일 DIV 요소 만 있습니다. 이것은 Ajax 기능에 의존하는 웹 앱의 상당히 전형적인 것입니다. 종종 Ajax 앱의 컨텐츠는 종종 JavaScript에 의해 동적으로 생성되므로 모든 컨텐츠가 서버에서 생성 한 비 Ajax 웹 응용 프로그램보다 페이지 소스 본문에서 훨씬 적은 마크 업이 나타납니다. 그러나 Ajax가 응용 프로그램의 절대적으로 필수적인 부분이 아닌 경우 응용 프로그램의 일반 HTML 버전을 제공해야합니다.
우리는 ajax 클래스를 사용하는 간단한 컨텐츠로 AppMonitor1.js 파일을 시작합니다 :
우리는 시작 변수를 사용하여 각 요청이 시작되는 시간을 기록합니다.이 그림은 각 요청에 걸리는 시간을 계산하는 데 사용됩니다. 우리는 타이밍 요청에 대한 추가 코드로 Ajax 클래스의 작품을 고무시켜 줄 필요가 없도록 글로벌 변수를 시작합니다. ajax 객체에 대한 호출 직전과 직후에 시작 값을 설정할 수 있습니다. .
ajax 변수는 단순히 ajax 클래스의 인스턴스를 보유합니다.
dopoll 함수는 실제로 ajax 클래스를 사용하여 HTTP 요청을 만듭니다. 원래 테스트 페이지에서 doget 메소드에 대한 호출을 인식해야합니다.
는 타겟 URL에 시작 값을 매개 변수로 한 쿼리 문자열에 추가했습니다. 우리는 실제로 서버 에서이 값을 사용하지 않을 것입니다. 우리는 인터넷 익스플로러의 지나치게 열성적인 캐싱을 처리하기 위해 임의의 가치로 사용하고 있습니다. 즉, 모든 xmlhttprequest로 작성된 모든 요청을 가져 오며, "기능"을 비활성화하는 한 가지 방법은 쿼리 문자열에 임의 값을 추가하는 것입니다. 시작의 밀리 초 값은 해당 임의 값으로 두 배가 될 수 있습니다. 이 접근법에 대한 대안은 XMLHTTPREQUEST 클래스의 setRequestHeader 메소드를 사용하여 요청에 대한 if-modified-since 헤더를 설정하는 것입니다.
마지막으로, 우리는 dopoll을 창에 첨부하여 모든 것을 시작합니다.
showpoll
로 결과를 처리합니다 doget에 전달하는 두 번째 매개 변수는 Ajax 클래스에 함수 showpoll에 대한 응답을 전달하도록 지시합니다. 그 기능의 코드는 다음과 같습니다
이것은 모두 매우 간단합니다. 함수는 단일 매개 변수를 기대합니다.이 매개 변수는 모든 것이 예상대로 진행되면 fakeserver.php에서 반환 된 문자열 확인이어야합니다. 응답이 올바른 경우 코드는 응답이 얼마나 오래 걸렸는지 파악하는 데 필요한 빠른 계산을 수행하고 결과가 포함 된 메시지를 만듭니다. 디스플레이를 위해 그 메시지를 Pollresult로 전달합니다
이 매우 간단한 구현에서 예상 응답 이외의 다른 것은 상당히 간결하고 도움이되지 않는 메시지를 초래합니다. 요청이 실패했습니다. 다음 장 에서이 앱을 업그레이드 할 때 오류 조건 처리를 더욱 강력하게 만들 것입니다.
일단 Pollresult가 설정되면 Printresult 기능으로 전달됩니다.
Printresult 함수는 페이지의 Lone Div 내부의 ShowPoll에서 전송 된 메시지를 표시합니다.
위의 코드의 테스트에 유의하십시오. 위의 코드는 DIV에 자식 노드가 있는지 확인하는 데 사용됩니다. 이것은 이전 반복 에이 DIV에 추가 한 텍스트 또는 페이지 마크 업에 DIV 내부에 포함 된 텍스트를 포함 할 수있는 텍스트 노드의 존재를 확인한 다음 제거 할 수 있습니다. 기존 텍스트 노드를 제거하지 않으면 코드는 새 결과를 페이지에 새 텍스트 노드로 추가하면 더 많은 텍스트가 지속적으로 추가되는 긴 텍스트 문자열을 표시합니다.
InnerHtml 속성은 웹 표준이 아니지만 모든 주요 브라우저가 지원합니다. 또한 DOM 방법에 필요한 네 줄과 비교할 때 단일 코드 라인이라는 사실에서 알 수 있듯이 DOM 메소드보다 사용하기가 더 쉽습니다. 페이지에 콘텐츠를 표시하는 방법도 본질적으로 더 좋습니다.
경우에 따라,이 두 가지 접근법의 렌더링 속도 차이를 기반으로 메소드를 선택하게 될 수 있습니다 (InnerHTML은 DOM 메소드보다 빠를 수 있음). 다른 경우, 당신은 코드의 명확성 또는 개인 취향에 따라 결정을 내릴 수 있습니다.
다시 프로세스를 다시 시작합니다
마지막으로, showpoll은 다음과 같이 Settimeout을 사용하여 15 초 안에 원래 Dopoll 함수에 대한 호출을 예약하여 전체 프로세스를 시작합니다.
코드가 Dopoll 함수를 지속적으로 호출한다는 사실은 페이지가로드되면 http는 해당 페이지가 닫힐 때까지 Fakeserver.php 페이지를 폴링하는 요청을 요청합니다. 폴링 변수는 보류중인 작업을 추적하고 클리어 타임 아웃을 사용하여 취소 할 수있는 간격 ID입니다. 설정 타임 아웃 호출의 첫 번째 매개 변수 인 Dopoll은 응용 프로그램의 주요 기능에 대한 포인터입니다. 두 번째는 요청 사이에 경과 해야하는 시간 (초)을 1 초 만에 나타냅니다.
전체 예제 코드
이 간단한 모니터링 애플리케이션으로 첫 번째 시험 실행의 모든 코드는 다음과 같습니다.
좋은 소프트웨어 엔지니어링 원칙을 따르기 위해 JavaScript 코드를 Markup에서 분리하고 두 개의 다른 파일에 넣었습니다.
.
나는이 책의 모든 예제 코드와 비슷한 접근법을 따르고 각 예제의 마크 업, JavaScript 코드 및 CSS를 별도의 파일로 분리합니다. 이 작은 모니터링 앱은 기본적으로 CSS 파일이 없습니다. 다음 장에서 더 멋지게 보이도록 몇 가지 스타일을 추가 할 것입니다. 앱 실행
브라우저에 페이지를로드하십시오. 웹 서버의 루트 디렉토리에 떨어 뜨려 브라우저에서 페이지를 엽니 다.
fakeserver.php 페이지가 올바르게 응답하는 경우 그림 2.3에 표시된 디스플레이와 같은 내용이 표시됩니다.
추가 읽기
이 장의 기술과 개념에 대해 더 많이 배우는 데 도움이되는 몇 가지 온라인 리소스가 있습니다.
JavaScript의 객체 모델
http://docs.sun.com/source/816-6409-10/obj.htm
http://docs.sun.com/source/816-6409-10/obj2.htm
Sun Microsystems가 주최하는 JavaScript 버전 1.3에 대한 클라이언트 측 JavaScript 안내서의 객체에 대한이 두 장을 확인하십시오. 첫 번째 장에서는 JavaScript에서 객체 작업을 수행하는 방법을 이해하는 데 필요한 모든 기본 개념을 설명합니다. 두 번째는 JavaScript의 프로토 타입 기반 상속 모델에 대해 더 깊이 들어가므로 JavaScript를 사용하여 객체 지향 코딩의 더 많은 힘을 활용할 수 있습니다.
이것은 JavaScript 객체를 사용하여 개인 인스턴스 변수를 만드는 간단한 소개입니다. JavaScript의 프로토 타입 기반 상속 체계에 대해 더 깊이 이해하는 데 도움이됩니다.
xmlhttprequest
Apple 개발자 연결의 좋은 참조 페이지가 있습니다. 그것은 xmlhttprequest 클래스에 대한 훌륭한 개요와 그 방법과 속성에 대한 참조 테이블을 제공합니다.
2002 년에 게시 된이 기사는 새로운 정보로 계속 업데이트되고 있습니다. 여기에는 javaScript 객체 표기법 (JSON) 및 비누뿐만 아니라 헤드 요청 제작 (get or post 대신)에 대한 정보가 포함됩니다.
이것은 Firefox에서 XMLHTTPREQUEST 구현에 대한 Xulplanet의 철저한 참조입니다.
여기에 또 다른 멋진 개요가 있습니다.이 개요는 다음과 같습니다.이 개요는 XMLHTTPRequest 객체의 덜 사용되지 않은 메소드 (예 : reveridemimeType, setRequestHeader 및 getResponseHeader)를 보여줍니다. 다시,이 참조는 Firefox의 구현에 중점을 둡니다 이것은 xmlhttprequest 구현에 대한 MSDN에 대한 Microsoft의 문서입니다.
요약
시스템 관리자가 여론 조사와 타임 아웃 임계 값 간격을 구성하는 방법
모니터링 프로세스를 시작하고 중지하는 쉬운 방법
이전 요청에 대한 응답 시간의 막대 그래프; 히스토리 목록의 항목 수는 사용자 구성 가능
그림 3.1은 모든 개선 사항을 완료하면 실행 중 응용 프로그램의 모습을 보여줍니다.
이 응용 프로그램의 코드는 AppMonitor2.html의 마크 업, AppMonitor2.js의 JavaScript 코드 및 AppMonitor2.css의 스타일 인 세 가지 파일로 나뉩니다. 우선, 필요한 모든 파일을 AppMonitor2.html에 연결합니다 : .
<..> 그림 3.1. 실행중인 응용 프로그램
코드 구성
<function>이 모든 새로운 기능은 우리 앱에 훨씬 더 복잡해 지므로 코드 내에서 어떤 종류의 구성을 설정하기에 좋은시기입니다 (글로벌 범위에 모든 것을 두는 것보다 훨씬 더 나은 옵션). 결국, 우리는 완전히 기능적인 Ajax 응용 프로그램을 구축하고 있으므로 올바르게 구성하고 싶습니다. </function>
로 범위 손실
불행히도, 응용 프로그램의 경우 상황이 그리 쉽지 않을 것입니다. 우리는 앱에서 Settimeout (및 setInterval)에 많은 호출을 사용하므로 JavaScript 클래스를 생성하는 일반적인 방법이 모니터 클래스에서 번거롭게 될 수 있습니다.
StartDone은 "완료된"애니메이션을 설정하고 SetInterval 를 사용하여 Dodone에 대한 반복 호출을 일정에 설정합니다.
dodone은 "완료된"애니메이션의 현재 프레임을 설정하고 완료되면 애니메이션을 종료합니다
시작
애니메이션을 설정하고 시작하고 시작하는 방법은 STARTPROC 메소드를위한 작업입니다.
Proc 속성을 Proc (Processing)로 설정 한 후이 코드는 SetDisplay 메소드를 호출하여 PollingMessage Div의 색상과 내용을 설정합니다. 다음에 SetDisplay를 자세히 살펴 보겠습니다
코드가 PollingMessage DIV의 색상과 내용을 설정하면 DIV의 불투명도를 100 (완전히 불투명)으로 초기화하고 DisplayOpacity를 호출 하여이 설정을 적용합니다.
마지막으로,이 메소드는 SetInterval을 호출하여 애니메이션 프로세스의 다음 단계를 예약합니다. settimeout과 마찬가지로 SetInterval 호출은 간격 ID를 반환합니다. 우리는 이것을 Procinterval 속성에 저장하여 나중에 프로세스를 중지 할 수 있습니다.
"처리…"및 "완료"애니메이션은 모두 setDisplay 메소드를 공유합니다 :
PollingMessage Div의 "처리…"과 "완료"상태의 유일한 차이점은 색상과 텍스트 이므로이 공통 기능을 사용하여 폴링 메이지 디스의 두 상태를 전환하는 것이 합리적입니다. 색상은 PollingMessage Div에 클래스를 할당하여 제어되므로 완료 및 처리 클래스에 대한 CSS 클래스 규칙을 스타일 시트에 추가해야합니다.
멈추게합니다
애니메이션을 부드럽게 중지하려면 특정 타이밍이 필요합니다. 우리는 애니메이션이 맥박 한가운데서 갑자기 멈추기를 원하지 않습니다. “처리…”이미지의 불투명도가 0으로 떨어질 때 자연스러운 휴식 시간에 멈추고 싶습니다.
따라서 애니메이션을 중지하기위한 스톱 포크 메소드는 실제로 그 자체로 멈추지 않습니다. 단지 애니메이션 프로세스에 편리한 지점에 도달했을 때 중지 될 때가되었음을 알리는 깃발을 설정합니다. 이것은 아내와 남편으로부터 하루가 끝날 때 많은 프로그래머가받은 전화가 코드의 논리적 정지 지점에 도착했을 때 집으로 돌아 오라고 상기시켜줍니다.
이 방법은 두 가지 유형의 중지를 구별해야합니다. 성공적으로 완료된 요청 (완료)과 사용자의 응용 프로그램을 중지하라는 요청 (abort).
DOPROC 메소드는이 플래그를 사용하여 "완료된"메시지를 표시할지 여부를 파악하거나 중지 할 것입니다.
Doproc 로 애니메이션을 실행합니다
90 밀리 초 간격으로 호출되는 DOPROC 방법은 PollingMessage Div의 불투명도를 변경하여 처리 애니메이션의 맥동 효과를 생성합니다. 코드는 다음과 같습니다
이 방법은 단순합니다. 주된 목적은 단순히 PollingMessage Div의 불투명도를 호출 할 때마다 10% 줄입니다.
첫 번째 if 문은 div가 완전히 사라 졌는지 확인할 것입니다. 가지고 있고 애니메이션이 여전히 실행중인 경우 불투명도를 100 (완전히 불투명)으로 재설정합니다. 90 밀리 초 마다이 코드를 실행하면 폴링 메이지 디스 (Pollingmessage Div)가 사라지고 다시 나타나고 다시 사라지는 부드러운 효과가 생깁니다. 응용 프로그램이 바쁘다는 친숙한 맥박 효과가 있습니다.
애니메이션이 계속 실행되지 않으면 Clearinterval에 전화하여 애니메이션을 중지 한 다음 Proc 속성이 완료되면 STARTDONE을 호출하여 "완료"애니메이션을 트리거합니다.
StartDone 로 "완료"애니메이션을 시작합니다
STARTDONE 메소드는 STARTPROC 메소드가 "프로세싱…"애니메이션에 사용하는 "완료"애니메이션과 동일한 목적을 제공합니다. STARTPROC 과도 매우 비슷하게 보입니다
이번에는 텍스트를 "완료"로 변경하고 색상이 녹색으로 변경됩니다.
그런 다음 SetInterval과 함께 Dodone에게 전화를 걸었습니다.
최종 페이드
Dodone의 코드는 Doproc 코드보다 훨씬 간단합니다. Doproc과 마찬가지로 중지하라는 지시까지 지속적으로 처리 할 필요는 없습니다. 그것은 단지 폴링 메이지 DIV의 불투명도를 0에 도달 할 때까지 10% 줄이면 스스로를 멈 춥니 다. 꽤 간단한 것 :
<.> 그림 3.9. 펄스 상태 표시기가있는 응용 프로그램
마지막으로, 우리는 브라우저 에서이 코드를 테스트 할 준비가되었습니다. AppMonitor2.html 열기 브라우저에서 시작 버튼을 클릭하면 펄스 처리가 표시됩니다… 그림 3.9에 표시된 것과 같이 브라우저 뷰포트의 오른쪽 상단 근처의 메시지.
해당 여론 조사 간격에주의하십시오!
var hw = new HelloWorld(); <br>
hw.sayMessage(); <br>
hw.message = 'Goodbye'; <br>
hw.sayMessage();
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
이제 페이지에서 애니메이션이 실행되었으므로 이전 하나가 멈추기 전에 애니메이션을 다시 시작하지 않도록주의해야합니다. 이러한 이유로 Poll_interval을 2 초 미만으로 설정하지 않는 것이 좋습니다. 모니터 스타일
이제 응용 프로그램이 시작되고 실행되었으므로 CSS를 사용하여 좋아 보일 것입니다. 원하는 레이아웃을 달성하려면 다음 마크 업을 추가해야합니다.
보시다시피, 우리는 스타일을 걸 수있는 3 개의 div와 플로팅 된 응용 프로그램 상태 메시지 및 애니메이션을 지우기 위해 라인 브레이크를 추가했습니다. 이 페이지의 완성 된 CSS는 다음과 같습니다. 스타일의 인터페이스는 그림 3.10 : 에 나와 있습니다
var hw = new HelloWorld(); <br>
hw.sayMessage(); <br>
hw.message = 'Goodbye'; <br>
hw.sayMessage();
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
요약
첫 번째 작업 응용 프로그램은 AJAX를 사용하여 사용자가 현재로드 된 페이지를 떠나지 않고 서버에 여러 요청을하는 방법을 보여주었습니다. 또한 여러 작업을 비동기 적으로 수행 할 때 처리해야 할 복잡성에 대한 상당히 현실적인 그림을 제공했습니다. 이러한 복잡성의 좋은 예는 XMLHTTPREQUEST 요청을 시간에 시간에 사용하는 것입니다. 이 예제는 범위 손실 및 연결 시간 초과와 같은 AJAX 앱을 개발할 때 발생하는 일반적인 문제를 탐색하고이를 처리하는 데 도움이되는 실용적인 솔루션을 제공 할 수있는 좋은 기회를 제공했습니다.
.
에서 발췌 한 내용은 자신의 Ajax 웹 애플리케이션을 구축합니다 - 잊지 마십시오.이 기사를 .pdf 형식으로 다운로드 할 수 있습니다. 이 책에는 총 8 개의 챕터가 있으며, 그 결국 독자들은 여러 플레이어가 실시간으로 재생할 수있는 온라인 체스 게임을 포함하여 수많은 기능을 갖춘 웹 앱을 구축했을 것입니다.이 책의 목차에는 자세한 내용이 있습니다. .
Ajax 웹 앱을 구축하는 것에 대한 자주 묻는 질문 (FAQ)
웹 개발에서 Ajax의 주요 구성 요소는 무엇입니까? ajax는 비동기 JavaScript 및 XML을 나타내는 일련의 웹 개발 기술 세트입니다. 웹 페이지가 기존 페이지의 디스플레이 및 동작을 방해하지 않고 서버에서 데이터를 업데이트하고 검색 할 수 있습니다. AJAX의 주요 구성 요소에는 정보를 제시하기위한 HTML (또는 XHTML) 및 CSS, 동적 디스플레이를위한 문서 객체 모델 (DOM), 데이터를 운반하기위한 XML, 데이터를 조작하기위한 XSLT, XMLHTTPRequest 객체, XMLHTTPRequest 객체, XMLHTTPRequest 및 Javascript를 함께 제공합니다. 웹 사이트에서의 사용자 경험?
Ajax는 웹 사이트를보다 반응적이고 대화식으로 만들어 사용자 경험을 향상시킵니다. 웹 페이지는 모든 요청에 대해 전체 페이지 재 장전이 필요하지 않고 백그라운드에서 서버와 통신 할 수 있습니다. 즉, 서버가 요청을 처리하는 동안 사용자는 웹 페이지와 계속 상호 작용할 수 있으며, 더 부드럽고 원활한 사용자 경험을 초래합니다.
. ajax에서 xmlhttprequest 객체의 역할은 무엇입니까?
xmlhttprequest 객체는 Ajax의 핵심 구성 요소입니다. 전체 페이지를 다시로드하지 않고 서버로 데이터를 교환하고 웹 페이지의 일부를 업데이트하는 방법을 제공합니다. 그것은 HTTP 또는 HTTPS 요청을 웹 서버로 직접 보내고 서버 응답 데이터를 스크립트에 직접로드하는 데 사용됩니다.
ajax는 XML 이외의 기술과 함께 작동 할 수 있습니까?
예, XML의 'X'에도 불구하고 Ajax 응용 프로그램은 JSON (JAVASCRIPT)와 같은 다른 데이터 형식과 같은 다른 데이터 형식에서 작동 할 수 있습니다. 특히 JSON은 JavaScript에서 작업하기가 쉽고 XML보다 효율적 일 수 있기 때문에 Ajax에서 종종 사용됩니다.
웹 개발에서 Ajax의 일반적인 사용은 무엇입니까?
Ajax는 페이지를 다시로드하지 않고 실시간 데이터 업데이트가 필요한 웹 애플리케이션에서 일반적으로 사용됩니다. 여기에는 라이브 검색 결과, 자동 완성 양식 필드, 대화식 맵 및 동적 콘텐츠 업데이트와 같은 응용 프로그램이 포함됩니다. 소셜 미디어 피드, 이메일 클라이언트 및 전자 상거래 사이트는 종종 AJAX를 사용하여 부드럽고 대화식 사용자 경험을 제공합니다.
AJAX 사용의 잠재적 인 단점 또는 과제는 무엇입니까?
AJAX는 사용자 경험을 크게 향상시킬 수 있지만 잠재적 인 단점이 있습니다. 여기에는 브라우저 호환성 문제, 디버깅 및 테스트에 대한 어려움, 검색 엔진이 AJAX 컨텐츠를 색인화하기 위해 고군분투 할 수있는 검색 엔진 최적화 (SEO)의 문제가 포함됩니다. 또한 Ajax는 JavaScript에 의존하기 때문에 브라우저에 JavaScript를 비활성화 한 사용자는 Ajax 기반 기능을 사용할 수 없습니다.
AJAX 응용 프로그램이 액세스 가능하고 Seo 친화적 인 방법을 확인할 수있는 방법은 무엇입니까? 즉, HTML로 핵심 웹 페이지를 구축 한 다음 JavaScript가 활성화 된 사용자를 위해 AJAX 기능으로 향상시킵니다. SEO의 경우 서버 측 렌더링을 사용하여 검색 엔진에 완전히 렌더링 된 페이지를 전달하는 동시에 사용자에게 빠른 AJAX 중심 경험을 제공합니다. AJAX는 데이터 보안을 어떻게 처리합니까? AJAX 응용 프로그램은 다른 웹 애플리케이션과 동일한 방식으로 데이터 보안을 처리합니다. 처리하기 전에 모든 데이터를 검증하고 소독하고 HTTPS와 같은 데이터를 전송하기위한 안전한 방법을 사용하는 것이 중요합니다. 또한 AJAX는 응용 프로그램의 내부 작업을 클라이언트 측에 더 많이 노출시킬 수 있으므로 서버 측에서 민감한 작업이 보호되도록하는 것이 중요합니다.
ajax를 React 또는 Angular와 같은 프레임 워크와 함께 사용할 수 있습니까? 이러한 프레임 워크는 종종 AJAX 요청을위한 자체 추상화를 제공하지만 기본 XMLHTTPREQUEST 객체 또는 jQuery 또는 axios와 같은 다른 라이브러리를 사용할 수도 있습니다.
. ajax 응용 프로그램을 디버깅하려면 어떻게해야합니까?
Ajax 응용 프로그램 디버깅은 Ajax의 비동기 특성으로 인해 기존 웹 응용 프로그램을 디버깅하는 것보다 더 복잡 할 수 있습니다. 그러나 대부분의 최신 브라우저는 AJAX 요청 및 응답을 검사하고 네트워크 활동을 모니터링하며 JavaScript 코드를 진행할 수있는 개발자 도구를 제공합니다. 또한 많은 JavaScript 라이브러리 및 프레임 워크는 AJAX 오류 및 예외를 처리하는 도구와 방법을 제공합니다.
위 내용은 자신의 Ajax 웹 응용 프로그램을 구축하십시오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!