Приведу небольшой пример в стиле "Hello world!" по применению этой техники:
Всю рутиную работу с Ajax, обработкой событий можно свести в одну библиотеку которую написать самому или использовать одну из самых ходовых (например с JQuery), чтобы не мучатся с поиском ошибок.
Для демонстрации возможностей приведу примитивные варианты на js и php без каких либо сторонних библиотек.
- Пример #1 Необходимо передать что-то на сервер методом GET
- Пример #2 Необходимо передать что-то на сервер методом POST (urlEncoded data)
- Пример #3 Необходимо передать что-то на сервер методом POST (xml data)
- Скачать все одним архивом
Свой велосипед за 5 минут:
Copy Source | Copy HTML- //Небольшая подборка объектов которая может пригодится при использовании AJAX
- //На самом деле код немного излишний - необходимости в детектирования IE 5 уже наверное нету
- //Код на скорую руку!
- function AjaxObject(){
- var browser=detectBrowser();
- if (typeof XMLHttpRequest=="undefined"){
- //window.XDomainRequest
- XMLHttpRequest=function(){
- return new ActiveXObject(browser.isMsie5? "Microsoft.XMLHTTP":"Msxml2.XMLHTTP");
- };
- }
- this.xhr=new XMLHttpRequest();
- }
- //property:
- //.postOrGet =true if post, false if get
- //.onResponce =function(xhr_object)
- //.url
- //.data - data for send
- //.type - dataType: application/x-www-form-urlencoded or text/xml
- AjaxObject.prototype.start=function(property){
- var self=this;
- if(self.xhr){
- self.xhr.onreadystatechange = function(){
- if (self.xhr.readyState == 4){
- property.onResponce(self.xhr);
- }
- };
- self.xhr.open((property.postOrGet ? "POST" : "GET"),property.url,true);//true- asynchrone, false -synchrone
- if (property.type && property.postOrGet){
- self.xhr.setRequestHeader("Content-Type", property.type);
- if(self.xhr.ovverideMimeType)
- self.xhr.setRequestHeader("Connection","close");
- }
- self.xhr.send((property.postOrGet ? property.data : null));
- }
- };
- // Events fix
- function events(o, event_name, handler){
- if (o.addEventListener != undefined) {
- o.addEventListener(event_name, handler, false);
- }else if (o.attachEvent != undefined) {
- o.attachEvent(event_name, handler);
- }
- }
- // IE or not IE
- function detectBrowser(){
- var _ua = navigator.userAgent;
- return {
- isMsie: (/msie/i.test(_ua) && !/opera/i.test(_ua)),
- isMsie5: (/msie 5/i.test(_ua) && !/opera/i.test(_ua)),
- isMsie6: (/msie 6/i.test(_ua) && !/opera/i.test(_ua)),
- isMsie7: (/msie 7/i.test(_ua) && !/opera/i.test(_ua)),
- isMsie8: (/msie 8/i.test(_ua) && !/opera/i.test(_ua)),
- isMsie9: (/msie 9/i.test(_ua) && !/opera/i.test(_ua)),
- };
- }
Пример #1 Необходимо передать что-то на сервер методом GET:
Copy Source | Copy HTML- <!DOCTYPE HTML>
- <html>
- <head>
- <title>Ajax with get method</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <script src="ajaxObject.js"></script>
- <script>
- window.onload=function(){
- //DOM elements:
- var textField1=document.getElementById("textField1");
- var sendButton1=document.getElementById("sendButton1");
- var p_buf=document.getElementById("buf");
- //Ajax objects & properties:
- var ajObj= new AjaxObject();
- var options={
- postOrGet: false, //use Get method
- onResponce:function(xhr){
- if (xhr.status >= 200 && xhr.status<300){
- //Ok!
- if (p_buf.innerText!=undefined)
- p_buf.innerText=xhr.responseText;
- else
- p_buf.textContent=xhr.responseText;//in FF
- }
- else
- if (p_buf.innerText!=undefined)
- p_buf.innerText="trouble on recieve!";
- else
- p_buf.textContent="trouble on recieve!";//in FF
-
- },
- };
- //Event handlers:
- var clickHandler=function(e){
- options.url="ajax_get.php?name="+encodeURIComponent(textField1.value);
- ajObj.start(options);
- };
- events(sendButton1, "click",clickHandler);
- }
- </script>
- </head>
- <body>
- <p>Enter name:</p>
- <input type="text" id="textField1"/>
- <input type="button" id="sendButton1" value="Send name"/>
- <p id="buf"></p>
- </body>
- </html>
Код ajax_get.php:Copy Source | Copy HTML- <?php
- if ($_GET["name"]!="")
- echo "hello ",$_GET["name"],"!";
- else
- echo "Please, Enter name and try again! ";
- ?>
Пример #2 Необходимо передать что-то на сервер методом POST (urlEncoded data):
Copy Source | Copy HTML- <!DOCTYPE HTML>
- <html>
- <head>
- <title>Ajax with post method</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <script src="ajaxObject.js"></script>
- <script>
- window.onload=function(){
- //DOM elements:
- var textField1=document.getElementById("textField1");
- var sendButton1=document.getElementById("sendButton1");
- var p_buf=document.getElementById("buf");
- //Ajax objects & properties:
- var ajObj= new AjaxObject();
- var options={
- postOrGet: true, //use Get method
- onResponce:function(xhr){
- if (xhr.status >= 200 && xhr.status<300){
- //Ok!
- if (p_buf.innerText!=undefined)
- p_buf.innerText=xhr.responseText;
- else
- p_buf.textContent=xhr.responseText;//in FF
- }
- else
- if (p_buf.innerText!=undefined)
- p_buf.innerText="trouble on recieve!";
- else
- p_buf.textContent="trouble on recieve!";//in FF
- },
- type:"application/x-www-form-urlencoded",
- };
- //Event handlers:
- var clickHandler=function(e){
- options.url="ajax_post.php";
- options.data="name="+encodeURIComponent(textField1.value);
- ajObj.start(options);
- };
- events(sendButton1, "click",clickHandler);
- }
- </script>
- </head>
- <body>
- <p>Enter name:</p>
- <input type="text" id="textField1"/>
- <input type="button" id="sendButton1" value="Send name"/>
- <p id="buf"></p>
- </body>
- </html>
Код ajax_post.php:Copy Source | Copy HTML- <?php
- if ($_POST["name"]!="")
- echo "hello ",$_POST["name"],"!";# send data on page
- else
- echo "Please, Enter name and try again! ";
- ?>
Пример #3 Необходимо передать что-то на сервер методом POST (xml data):
Copy Source | Copy HTML- <!DOCTYPE HTML>
- <html>
- <head>
- <title>Ajax with post method and XML</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <script src="ajaxObject.js"></script>
- <script>
- window.onload=function(){
- //DOM elements:
- var textField1=document.getElementById("textField1");
- var sendButton1=document.getElementById("sendButton1");
- var p_buf=document.getElementById("buf");
- //Ajax objects & properties:
- var ajObj= new AjaxObject();
- var options={
- postOrGet: true, //use Get method
- onResponce:function(xhr){
- if (xhr.status >= 200 && xhr.status<300){
- //Ok!
- if (p_buf.innerText!=undefined)
- p_buf.innerText=xhr.responseText;
- else
- p_buf.textContent=xhr.responseText;//in FF
- }
- else
- if (p_buf.innerText!=undefined)
- p_buf.innerText="trouble on recieve!";
- else
- p_buf.textContent="trouble on recieve!";//in FF
- },
- type:"text/xml",
- };
- //Event handlers:
- var clickHandler=function(e){
- options.url="ajax_xml_post.php";
- //this is xml data for server
- options.data="<data><name>"+encodeURIComponent(textField1.value)+"</name></data>";
- ajObj.start(options);
- };
- events(sendButton1, "click",clickHandler);
- }
- </script>
- </head>
- <body>
- <p>Enter name:</p>
- <input type="text" id="textField1"/>
- <input type="button" id="sendButton1" value="Send name"/>
- <p>That ypur have send:</p>
- <textarea id="buf" style="width:400px; height:200px;"></textarea>
- </body>
- </html>
Код ajax_xml_post.php:Copy Source | Copy HTML- <?php
- # input xml data
- $xml=@file_get_contents('php://input');
- #send back what have you send
- echo $xml;
- ?>
Скачать все одним архивом
Комментариев нет:
Отправить комментарий