PHP와 AJAX 요청
- 이전 페이지 XMLHttpRequest
- 다음 페이지 AJAX XML
AJAX 요청
아래 AJAX 예제에서, 사용자가 웹 양식에 데이터를 입력할 때 웹 페이지가 온라인 웹 서버와 어떻게 통신하는지 보여줍니다.
아래 텍스트 박스에 이름을 입력하세요:
추천:
이 예제는 세 페이지를 포함하고 있습니다:
- 간단한 HTML 양식
- JavaScript 코드
- PHP 페이지
HTML 양식
이는 HTML 양식입니다. 이는 간단한 HTML 양식과 JavaScript에 대한 링크를 포함하고 있습니다:
<html> <head> <script src="clienthint.js"></script> </head> <body> <form> First Name: <input type="text" id="txt1" onkeyup="showHint(this.value)"> </form> <p>추천: <span id="txtHint"></span></p> </body> </html>
예제 설명 - HTML 양식
그렇게 보면, 위의 HTML 페이지에는 "txt1"라는 이름의 입력 필드가 있는 간단한 HTML 양식이 포함되어 있습니다.
이 양식은 이렇게 작동합니다:
- 사용자가 입력 필드에서 키를 누르고 떼 때, 이벤트가 발생합니다
- 이 이벤트가 발생할 때, showHint()라는 이름의 함수가 실행됩니다
- 양식 아래에 "txtHint"라는 이름의 <span>가 있습니다. 이는 showHint() 함수가 반환하는 데이터의 대체 텍스트로 사용됩니다.
JavaScript
JavaScript 코드가 "clienthint.js" 파일에 저장되어 있으며, 이는 HTML 문서에 링크되어 있습니다:
var xmlHttp function showHint(str) { if (str.length==0) { document.getElementById("txtHint").innerHTML="" return; } xmlHttp = GetXmlHttpObject(); if (xmlHttp == null) { alert("브라우저는 HTTP 요청을 지원하지 않습니다"); return; } var url = "gethint.php"; url = url + "?q=" + str; url = url + "&sid=" + Math.random(); xmlHttp.onreadystatechange = stateChanged; xmlHttp.open("GET", url, true); xmlHttp.send(null); } function stateChanged() { if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") { document.getElementById("txtHint").innerHTML = xmlHttp.responseText; } } function GetXmlHttpObject() { var xmlHttp = null; try { // 파이어폭스, 오퍼라 8.0+, 사파리 xmlHttp = new XMLHttpRequest(); } catch (e) { // 인터넷 익스플로러 try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
예시 설명:
showHint() 함수
입력 필드에 한 문자를 입력할 때마다 이 함수가 한 번씩 실행됩니다
텍스트 박스에 내용이 있을 경우 (str.length > 0), 이 함수는 다음과 같이 실행됩니다:
- 서버로 보내야 할 URL (파일 이름)을 정의합니다
- 입력 필드 내용을 포함한 파라미터 (q)를 이 URL에 추가합니다
- 서버가 캐시 파일을 사용하지 않도록 랜덤 수를 추가합니다
- GetXmlHttpObject 함수를 호출하여 XMLHTTP 객체를 생성하고, 이벤트가 발생할 때 "stateChanged"라는 함수를 실행하도록 알립니다
- 주어진 URL을 사용하여 이 XMLHTTP 객체를 열어주세요
- 서버에 HTTP 요청을 보냅니다
입력 필드가 비어 있으면 함수는 단순히 txtHint 대체 문자의 내용을 비웁니다。
stateChanged() 함수
XMLHTTP 객체의 상태가 변경될 때마다 이 함수를 실행합니다。
상태가 4(또는 "complete")가 되면, txtHint 대체 문자 txtHint의 내용으로 응답 텍스트를 채웁니다。
GetXmlHttpObject() 함수
AJAX 애플리케이션은 XML을 완벽히 지원하는 웹 브라우저에서만 실행될 수 있습니다。
위 코드는 GetXmlHttpObject() 함수를 호출합니다。
이 함수의 역할은 다른 브라우저에서 다른 XMLHTTP 객체를 생성하는 문제를 해결합니다。
이 점은 이전 장에서 설명했습니다。
PHP 페이지
JavaScript 코드가 호출하는 서버 페이지는 "gethint.php"라는 간단한 서버 페이지입니다。
"gethint.php" 의 코드는 이름 배열을 확인하고 클라이언트에게 해당 이름을 반환합니다:
<?php // Fill up array with names $a[]="Anna"; $a[]="Brittany"; $a[]="Cinderella"; $a[]="Diana"; $a[]="Eva"; $a[]="Fiona"; $a[]="Gunda"; $a[]="Hege"; $a[]="Inga"; $a[]="Johanna"; $a[]="Kitty"; $a[]="Linda"; $a[]="Nina"; $a[]="Ophelia"; $a[]="Petunia"; $a[]="Amanda"; $a[]="Raquel"; $a[]="Cindy"; $a[]="Doris"; $a[]="Eve"; $a[]="Evita"; $a[]="Sunniva"; $a[]="Tove"; $a[]="Unni"; $a[]="Violet"; $a[]="Liza"; $a[]="Elizabeth"; $a[]="Ellen"; $a[]="Wenche"; $a[]="Vicky"; //get the q parameter from URL $q=$_GET["q"]; //lookup all hints from array if length of q>0 if (strlen($q) > 0) { $hint=""; for($i=0; $i<count($a); $i++) { if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q)))) { if ($hint=="") { $hint=$a[$i]; } else { $hint=$hint." , ".$a[$i]; } } } } //데이터를 찾지 못하면 "no suggestion"으로 출력 설정 //정확한 값을 설정하거나 if ($hint == "") { $response="no suggestion"; } else { $response=$hint; } //response 출력 echo $response; ?>
JavaScript에서 전달된 텍스트가 있으면 (strlen($q) > 0) then:
- JavaScript에서 전달된 문자와 일치하는 이름을 찾다
- 여러 이름을 찾으면, 모든 이름을 response 문자열에 포함하다
- 일치하는 이름을 찾지 못하면, response를 "no suggestion"으로 설정하다
- 이름을 하나나 여러 개 찾으면, response를 이 이름으로 설정하다
- response를 "txtHint" 대체자로 보내기
- 이전 페이지 XMLHttpRequest
- 다음 페이지 AJAX XML