AJAX 투표
다음 예에서는 웹 페이지를 새로 고치지 않고 투표 결과를 표시하는 투표 프로그램을 보여줍니다.
오른쪽에 페이지가 표시됩니다.
위 옵션 중 하나를 사용자가 선택하면 "getVote()"라는 함수가 실행됩니다. 이 함수는 "onclick" 이벤트에 의해 트리거됩니다.
이 예는 세 부분으로 구성됩니다
HTML 양식
PHP 파일
TXT 파일
HTML 파일:
1.php 참조 소스 코드
<html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> <script> function getVote(int) { //创建 XMLHttpRequest 对象 if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } //创建在服务器响应就绪时执行的函数 xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("poll").innerHTML=xmlhttp.responseText; } } //向服务器上的文件发送请求 xmlhttp.open("GET","2.php?vote="+int,true); xmlhttp.send(); } </script> </head> <body> <div id="poll"> <h3>你喜欢 PHP 和 AJAX 吗?</h3> <!-- 用户选择一个选项,触发onclick事件,执行getVote()函数 --> <form> 是: <input type="radio" name="vote" value="0" onclick="getVote(this.value)"> <br>否: <input type="radio" name="vote" value="1" onclick="getVote(this.value)"> </form> </div> </body> </html>
위 HTML 페이지에는 <div> 요소에 두 개의 라디오 버튼이 있는 간단한 HTML 양식이 포함되어 있습니다.
양식은 다음과 같이 작동합니다.
사용자가 "예" 또는 "아니요"를 선택하면 이벤트가 트리거됩니다.
이벤트가 트리거되면 getVote() 함수가 실행됩니다.
양식 주변에는 "poll"이라는 <div> getVote() 함수에서 데이터가 반환되면 반환된 데이터가 양식을 대체합니다.
getVote() 함수는 다음 단계를 수행합니다.
XMLHttpRequest 객체 생성
생성됨 in 서버 응답이 준비되었을 때 실행되는 함수
서버에 있는 파일에 요청 보내기
추가된 매개변수(q)를 참고하세요 URL 끝까지(드롭다운 목록의 내용 포함)
PHP 파일:
위 단락에서 JavaScript가 호출한 서버 페이지는 "2.php"라는 PHP 파일입니다.
<?php //过滤浏览器传过来的数据 $vote = htmlspecialchars($_REQUEST['vote']); // 获取文件中存储的数据 $filename = "3.txt"; $content = file($filename); // 将数据分割到数组中 $array = explode("||", $content[0]); $yes = $array[0]; $no = $array[1]; if ($vote == 0) { $yes = $yes + 1; } if ($vote == 1) { $no = $no + 1; } // 插入投票数据 $insertvote = $yes."||".$no; $fp = fopen($filename,"w");//写入方式打开 fputs($fp,$insertvote);//将$insertvote写入文件中 fclose($fp);//关闭打开文件 ?> <h2>结果:</h2> <table> <tr> <td>是:</td> <td> <span style="display: inline-block; background-color:green; width:<?php echo(100*round($yes/($no+$yes),2)); ?>px; height:20px;" ></span> <?php echo(100*round($yes/($no+$yes),2)); ?>% </td> </tr> <tr> <td>否:</td> <td> <span style="display: inline-block; background-color:red; width:<?php echo(100*round($no/($no+$yes),2)); ?>px; height:20px;"></span> <?php echo(100*round($no/($no+$yes),2)); ?>% </td> </tr> </table>
선택한 값이 JavaScript에서 PHP 파일로 전송되면 어떻게 되나요?
Get" poll_result.txt" 파일 내용
파일 내용을 변수에 넣고 선택한 변수에 1을 더합니다
결과 "poll_result.txt" 파일 쓰기
그래픽 투표 결과 출력
TXT 파일
텍스트 파일(3.txt)은 투표 프로그램의 데이터를 저장합니다.
다음과 같습니다:
0||0
첫 번째 숫자는 '찬성' 투표를 나타내고 두 번째 숫자는 '반대' 투표를 나타냅니다.
참고: 웹 서버에서만 이 텍스트 파일을 편집할 수 있도록 허용해야 합니다. 웹 서버(PHP) 외에는 다른 사람이 액세스하도록 허용하지 마세요.
학습경험
이 예시에는 주로 다음 지식 포인트가 포함되어 있습니다.
양식 기본 사항: 라디오 버튼
onclick 이벤트: 개체를 클릭할 때 발생
함수 호출, 함수 값 전달
AJAX XMLHttpRequest 객체 생성, 서버가 응답할 때 실행되는 함수, 서버의 파일에 요청 보내기: 참조 학습 경험용 1-5
HTML DOM getElementById() 메소드: 지정된 ID를 가진 첫 번째 객체에 대한 참조를 반환합니다.
PHP 관련 파일에 대한 작업:
file(): 전체 파일을 배열로 읽습니다.
fopen(): 파일 또는 URL을 엽니다
fputs(): 파일에 쓰기
fclose(): 열려 있는 파일 닫기
관련 함수:
htmlspecialchars(): 미리 정의된 문자를 HTML 엔터티로 변환
폭발(): 배열의 경우 문자열 분할