>웹 프론트엔드 >JS 튜토리얼 >Ajax로 명령을 내립니다

Ajax로 명령을 내립니다

Lisa Kudrow
Lisa Kudrow원래의
2025-03-06 01:03:12408검색

Ajax로 명령을 내립니다 Gmail 및 Google지도와 같은보다 역동적이고 반응이 좋고 데스크톱과 같은 웹 응용 프로그램을 구축하고 싶습니까? 그러면이 기사는 당신을위한 것입니다! Ajax 기본 사항과 간단한 Ajax 응용 프로그램을 구축하는 과정을 통해 안내합니다.

해당 응용 프로그램은 일반적으로 쉘 액세스가 필요한 시스템 명령을 실행하기위한 브라우저 인터페이스 인 WebConsole입니다. 인기있는 두 개의 JavaScript 라이브러리 인 JQuery와 Yui. 이 기사에서는 2005 년에 처음 출판되어 최근에 업데이트 된이 기사에서 HTTP 요청을위한 간단하고 재사용 가능한 JavaScript 기능의 생성에 대해 설명하겠습니다. 그런 다음 간단한 응용 프로그램을 작성하는 데 해당 기능을 적용하겠습니다.

yui 및 jQuery 예제가 있지만 기사는 특정 Ajax 라이브러리에 대한 자습서가 아닙니다. 대신, HTTP 요청 작성에 대한 더 많은 실습 정보를 제공하여 해당 라이브러리를 평가하거나 직접 진행하기로 결정할 때 더 나은 위치에있게됩니다.

키 테이크 아웃

ajax는 브라우저 내에서 HTTP 요청을 처리하여 Gmail 및 Google지도와 유사한 동적이고 반응 형 웹 애플리케이션을 생성 할 수 있습니다. 튜토리얼에는 jquery 또는 yui와 같은 특정 라이브러리에 의존하지 않고 다양한 응용 프로그램에서 사용할 수있는 HTTP 요청을위한 재사용 가능한 JavaScript 기능이 소개됩니다. 간단한 예제는 http 요청을 만드는 기본 단계를 보여줍니다. xmlhttprequest 객체 생성, 콜백 함수를 할당하고 요청을 보냅니다. 이 기사는 WebConsole 애플리케이션을 소개하여 브라우저 인터페이스를 통해 서버 측 명령 실행을 가능하게하여 실제 ajax 사용을 보여줍니다. 보안 문제가 강조되며, 실행 가능한 사령부 제한의 중요성을 강조하고 승인되지 않은 서버 액세스를 방지하기 위해 입력을 소독합니다. 튜토리얼은 XML 및 JSON과 같은 다양한 데이터 형식을 처리하고 AJAX를 인기있는 JavaScript 라이브러리와 강화 된 기능을 통합하는 등 고급 주제를 다룹니다.

간단한 http 요청 예 먼저 JavaScript에서 HTTP 요청을 작성하고 응답을 처리하는 흐름을 수정하겠습니다. 이것은 기억을 새로 고치는 빠른 예일뿐입니다. 모든 매운 세부 사항에 대해서는 Sitepoint의 입문 기사 인“Ajax : 원격 스크립팅과의 사용 가능한 상호 작용”을 참조하십시오. 세 가지 기본 단계가 있습니다

xmlhttprequest 객체를 만듭니다 HTTP 응답을 처리하기 위해 콜백 함수를 할당합니다 요청을 (보내기)

간단한 HTML 문서 Test.html을 요청할 예제를 보자. "나는 테스트이다"텍스트 만 포함되어있다. 그런 다음 test.html 파일의 내용을 Alert () 알립니다 :

이 예제가 작동하는 방법은 다음과 같습니다


    사용자는 "요청 만들기"버튼을 클릭합니다 이것은 동일한 디렉토리에있는 html 파일의 이름을 매개 변수로 makerequest () 함수로 호출합니다. 이 경우 test.html. 입니다 요청이 전송됩니다.
  1. OnreadyStateChange 이벤트 화재 및 실행은 AlertContents ()로 전달됩니다. alertContents () 응답이 수신되었는지 확인하고 괜찮은 경우 Alert ()는 test.html 파일의 내용을 확인합니다.
    직접 예제를 테스트하고 테스트 파일을보십시오.
  2. 문제 위의 예는 제대로 작동했지만 프라임 시간을 준비하기 전에 개선해야 할 사항이 있습니다. 개선은 모든 지루하고 반복적 인 객체 생성 및 요청/응답을 처리하는 재사용 가능한 요청 함수를 코딩하는 한편, 프리젠 테이션 부분을 다른 기능에 남겨 두는 것이며, 이는 요청에 관계없이 그 결과를 소스에 관계없이 처리합니다.
    . 위의 예에서, 우리는 MakeRequest () 및 AlertContents () 함수가 모두 액세스 할 수있는 전역 변수 인 http_request가 필요했으며, 이는 재사용 성 측면에서 좋지 않으며 1 개의 충돌 위험을 위험에 빠뜨 렸습니다. 이상적으로는 Makerequest ()가 요청을 수행해야하며 AlertContents ()는 결과를 제시해야합니다. 어떤 기능도 다른 사람에 대해 알고 있거나 요구할 필요가 없습니다.
  3. 재사용 가능한 요청 기능의 코드는 다음과 같습니다
  4. 이 함수는 세 가지 매개 변수를 수신합니다
  5. get 응답이 수신 될 때 호출 할 수있는 기능 플래그 콜백 함수가 XML 문서 (true) 또는 일반 텍스트 (False, Default) 가 예상되는 경우 플래그
  6. 이 기능은 요청 객체를 멋지게 래핑하고 분리하기 위해 두 개의 JavaScript 기능에 의존합니다. 첫 번째는 다음과 같이 새로운 기능 (익명 함수라고 함)을 정의하는 능력입니다.
  7. http_request.onreadystatechange = function () {...}
다른 요령은 이름을 미리 알지 못하고 콜백 함수를 호출하는 능력입니다. 예를 들면 :

콜백 함수의 이름이 따옴표없이 어떻게 전달되는지에 유의하십시오.
http 요청 메소드와 쿼리 문자열을 함수의 매개 변수로 전달한 다음 Call에 Open () 및 send () 메서드를 사용하여 기능을 더 쉽게 재사용 할 수 있습니다. 이를 통해 원래 수행하려는 Gets 외에 게시물 요청을 할 수 있습니다. 함수의 또 다른 기능은 200 이외의 응답 코드를 처리하는 것입니다. 이는 더 구체적으로 원하고 반환 된 성공/오류 코드의 유형에 따라 적절한 조치를 취할 경우 편리 할 수 ​​있습니다. 간단한 예는 를 다시 방문했습니다 이제 test.html 파일의 내용이 alert () ed 인 이전 예제를 다시 만들어 봅시다. 이번에는 반짝이는 새로운 재사용 가능한 요청 기능을 사용함으로써 사용 된 두 기능의 수정 된 버전이 훨씬 간단합니다.
보시다시피 AlertContents ()는 단순히 표현적입니다. 상태, ReadyState 또는 HTTP 요청이 없습니다. 이러한 기능은 이제 한 명에 불과하기 때문에 실제로 우리는 실제로 그것들을 완전히 제거하고 대신 함수 호출을 변경할 수 있습니다. 따라서 전체 예는 다음과 같습니다.

네, 그렇게 쉽습니다! 예제 및 전체 소스 코드보기 (Old Friend View 소스를 통해 사용할 수 있음).

<button >Make a request</button> <br>
 <br>
<script type="text/javascript"> <br>
 <br>
var http_request = false; <br>
 <br>
function makeRequest(url) { <br>
 <br>
   if (window.XMLHttpRequest) { // Mozilla, Safari, IE7... <br>
       http_request = new XMLHttpRequest(); <br>
   } else if (window.ActiveXObject) { // IE6 and older <br>
       http_request = new ActiveXObject("Microsoft.XMLHTTP"); <br>
   } <br>
   http_request.onreadystatechange = alertContents; <br>
   http_request.open('GET', url, true); <br>
   http_request.send(null); <br>
 <br>
} <br>
 <br>
function alertContents() { <br>
   if (http_request.readyState == 4) { <br>
       if (http_request.status == 200) { <br>
           alert(http_request.responseText); <br>
       } else { <br>
           alert('There was a problem with the request.'); <br>
       } <br>
   } <br>
} <br>
 <br>
document.getElementById('mybutton').onclick = function() { <br>
   makeRequest('test.html'); <br>
} <br>
 <br>
</script>
우리 프로젝트 : WebConsole 애플리케이션

ajax 기본 사항을 알고, 재사용 가능한 요청을하는 방법으로 무장하고, 실제로 실제 생활에서 사용할 수있는 작은 것을 만들기 위해 더 깊이 들어 갑시다.

우리가 만든 응용 프로그램을 사용하면 Windows 또는 Linux 기반의 웹 서버에서 Shell 명령을 실행할 수 있습니다. 우리는 앱을 콘솔 창처럼 느끼게하기 위해 약간의 CSS 노력을 기울일 것입니다.

인터페이스 측면에서, 우리는 지금까지 실행 된 명령의 결과를 포함하는 스크롤 가능한

하나와 실행할 명령을 입력하는 하나의 스크롤 가능
가 있습니다. 그들은 검은 배경과 회색 택배 글꼴이 있습니다. 스크린 샷은 다음과 같습니다.
function makeHttpRequest(url, callback_function, return_xml) <br>
{ <br>
  var http_request, response, i; <br>
 <br>
  var activex_ids = [ <br>
    'MSXML2.XMLHTTP.3.0', <br>
    'MSXML2.XMLHTTP', <br>
    'Microsoft.XMLHTTP' <br>
  ]; <br>
 <br>
  if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+... <br>
    http_request = new XMLHttpRequest(); <br>
    if (http_request.overrideMimeType) { <br>
      http_request.overrideMimeType('text/xml'); <br>
    } <br>
  } else if (window.ActiveXObject) { // IE6 and older <br>
    for (i = 0; i < activex_ids.length; i++) { <br>
      try { <br>
        http_request = new ActiveXObject(activex_ids[i]); <br>
      } catch (e) {} <br>
    } <br>
  } <br>
 <br>
  if (!http_request) { <br>
    alert('Unfortunately your browser doesn't support this feature.'); <br>
    return false; <br>
  } <br>
 <br>
  http_request.onreadystatechange = function() { <br>
    if (http_request.readyState !== 4) { <br>
        // not ready yet <br>
        return; <br>
    } <br>
    if (http_request.status !== 200) { <br>
      // ready, but not OK <br>
      alert('There was a problem with the request.(Code: ' + http_request.status + ')'); <br>
      return; <br>
    } <br>
    if (return_xml) { <br>
      response = http_request.responseXML; <br>
    } else { <br>
      response = http_request.responseText; <br>
    } <br>
    // invoke the callback <br>
    callback_function(response); <br>
  }; <br>
 <br>
  http_request.open('GET', url, true); <br>
  http_request.send(null); <br>
}

html

다음은 응용 프로그램의 HTML 부분입니다
<:> 그게 IT : 실행중인 명령의 결과로 업데이트되고 명령을 입력 할 수있는 가 업데이트됩니다.
CSS

스타일 시트 WebConsole.css는 결과

및 명령의 스타일을 정의합니다. 우리는 오버플로 속성을 자동으로 설정하여 명령 실행 결과를 스크롤 할 수있는
를 만듭니다. 또한 태그 디스플레이 속성을 인라인으로 변경합니다 (블록은 기본값). 또한 모든 것이 "Consoley :"회색 모자마 글꼴을 검은 배경에 보이게하는 재사용 가능한 .console 클래스도 있습니다. 서버 측 코드

우리의 응용 프로그램은 get 매개 변수 '명령'을 통해 명령을 수신하는 서버 측 스크립트 (exec.php)에 요청을합니다. 이 스크립트는 명령이 허용 목록에 나타나는지 확인하고 (더 많은 명령을 허용하도록이 목록을 편집 할 수 있음) 명령을 실행하고 결과를 인쇄합니다. 명령은 기본 PHP 함수 shell_exec ()의 도움으로 실행됩니다. PHP는 여기서 사용되지만 선호하는 서버 측 언어를 사용 하여이 기능을 구현하는 것은 비교적 쉽습니다.

<button >Make a request</button> <br>
 <br>
<script type="text/javascript"> <br>
 <br>
var http_request = false; <br>
 <br>
function makeRequest(url) { <br>
 <br>
   if (window.XMLHttpRequest) { // Mozilla, Safari, IE7... <br>
       http_request = new XMLHttpRequest(); <br>
   } else if (window.ActiveXObject) { // IE6 and older <br>
       http_request = new ActiveXObject("Microsoft.XMLHTTP"); <br>
   } <br>
   http_request.onreadystatechange = alertContents; <br>
   http_request.open('GET', url, true); <br>
   http_request.send(null); <br>
 <br>
} <br>
 <br>
function alertContents() { <br>
   if (http_request.readyState == 4) { <br>
       if (http_request.status == 200) { <br>
           alert(http_request.responseText); <br>
       } else { <br>
           alert('There was a problem with the request.'); <br>
       } <br>
   } <br>
} <br>
 <br>
document.getElementById('mybutton').onclick = function() { <br>
   makeRequest('test.html'); <br>
} <br>
 <br>
</script>

경고! $ allend_commands 배열은 사용자가 콘솔을 통해 실행할 수있는 명령을 제한합니다. 배열에 원하는만큼 많은 명령을 추가 할 수 있지만 웹 서버에서 추가 명령이 실제로 실행됩니다. 형식 C :: ApaceCectl STOP 또는 RM Â RF 추가 권장은 권장되지 않습니다! . JavaScript
JavaScript 코드의 첫 번째 단계는 네임 스페이스를 정의하는 것입니다.
우리가 필요한 다른 모든 변수와 함수는이 객체의 속성으로 정의됩니다. 이를 통해 글로벌 네임 스페이스를 깨끗하게 유지하고 코드는 자체 포함 할 수 있습니다. 응용 프로그램에서 JavaScript 코드의 흐름은 다음과 같습니다.

webConsole.keyEvent () 함수는 입력 필드의 OnKeyUp 이벤트에 첨부되며 키를 누르고 릴리스 할 때마다 호출됩니다. webConsole.keyEvent () 코드 13이있는 키가 누르면 (Enter/Return 키입니다) Enter가 누르면 요청의 URL은 다음과 같이 구성됩니다. URL은 재사용 가능한 makehttprequest () 함수로 전달됩니다. 또한 콜백 함수의 이름 인 WebConsole.printresult는 makehttprequest ()의 매개 변수로 제공됩니다. 성공적인 서버 응답 후 WebConsole.printresult ()가 호출됩니다 webConsole.printresult ()는 결과

를 업데이트하고
를 스크롤하고 다음 명령을 입력 할 공간을 만들기 위해 명령 텍스트 상자를 지 웁니다. KeyEvent () 함수의 본문이 다음과 같습니다. 우리는 makehttprequest ()의 세 번째 매개 변수로 True를 전달하지 않았기 때문에 텍스트 응답 (XML 아님)이 printresult ()로 전달됩니다. 다음, 결과
를 업데이트 할 함수를 살펴 보겠습니다.
를 업데이트하는 빠른 방법이 있으며, 이는 요소의 내부 속성을 사용하는 것입니다.

그러나 웹 페이지를 동적으로 업데이트하기 위해 InnerHTML을 사용하는 것은 HTML 코드를 문자열로 취급하는 반면, 현대 웹 디자인 사고는 페이지를 노드의 XML 트리를 포함하는 문서로 취급하는 것을 선호하며 DOM 방법 및 속성을 통해 액세스 할 수 있습니다. DOM은

를 업데이트하기 위해 이제 우리가 취할 길입니다. 여기 기능이 있습니다. 아래는 작동 방식에 대한 몇 가지 메모입니다 이 기능 :
function makeHttpRequest(url, callback_function, return_xml) <br>
{ <br>
  var http_request, response, i; <br>
 <br>
  var activex_ids = [ <br>
    'MSXML2.XMLHTTP.3.0', <br>
    'MSXML2.XMLHTTP', <br>
    'Microsoft.XMLHTTP' <br>
  ]; <br>
 <br>
  if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+... <br>
    http_request = new XMLHttpRequest(); <br>
    if (http_request.overrideMimeType) { <br>
      http_request.overrideMimeType('text/xml'); <br>
    } <br>
  } else if (window.ActiveXObject) { // IE6 and older <br>
    for (i = 0; i < activex_ids.length; i++) { <br>
      try { <br>
        http_request = new ActiveXObject(activex_ids[i]); <br>
      } catch (e) {} <br>
    } <br>
  } <br>
 <br>
  if (!http_request) { <br>
    alert('Unfortunately your browser doesn't support this feature.'); <br>
    return false; <br>
  } <br>
 <br>
  http_request.onreadystatechange = function() { <br>
    if (http_request.readyState !== 4) { <br>
        // not ready yet <br>
        return; <br>
    } <br>
    if (http_request.status !== 200) { <br>
      // ready, but not OK <br>
      alert('There was a problem with the request.(Code: ' + http_request.status + ')'); <br>
      return; <br>
    } <br>
    if (return_xml) { <br>
      response = http_request.responseXML; <br>
    } else { <br>
      response = http_request.responseText; <br>
    } <br>
    // invoke the callback <br>
    callback_function(response); <br>
  }; <br>
 <br>
  http_request.open('GET', url, true); <br>
  http_request.send(null); <br>
}

위 내용은 Ajax로 명령을 내립니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

php JavaScript json html5 jquery css ajax css3 less html xss csrf Static String Integer Array Object define if for while format include require Session try Validating Sanitizing xml Directory Error Logging auto using class Length Interface Namespace Property Event Collection var pointer append delete console function default dom this location history innerHTML alert display position overflow background input windows database http linux everything prompt
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Firebug를 설치하고 사용할 수있는 쉬운 가이드다음 기사:Firebug를 설치하고 사용할 수있는 쉬운 가이드

관련 기사

더보기