{"id":601,"date":"2010-06-17T17:02:30","date_gmt":"2010-06-17T16:02:30","guid":{"rendered":"http:\/\/www.jaconet.org\/?p=601"},"modified":"2025-02-24T22:53:34","modified_gmt":"2025-02-24T21:53:34","slug":"a-general-purpose-javascript-ajax-object","status":"publish","type":"post","link":"https:\/\/www.lemie5lire.com\/?p=601","title":{"rendered":"A general purpose JavaScript ajax object"},"content":{"rendered":"<p style=\"text-align: justify;\">During the years I needed to use always more often ajax implementations in web design. There are several reasons to use this technology but the first is for sure that reloading a page just to update a small quantity of data is really annoying and looks really &#8220;not professional&#8221;.<\/p>\n<p style=\"text-align: justify;\">So the first thing that you can realize in approaching ajax is that you need to write code using JavaScript, HTML and PHP or other serve side languages, and you will feel for sure much better if you can use something standard: for example a library.<\/p>\n<p style=\"text-align: justify;\">Actually, there are really tons of libraries, scripts and codes that can help you in your job, but I never found once that was exactly as I like. So I wrote something that I want to share here.<\/p>\n<p style=\"text-align: justify;\">Te requirements I had in mind writing the code were:<\/p>\n<p style=\"text-align: justify;\">&#8211; Object oriented<\/p>\n<p style=\"text-align: justify;\">&#8211; Flexible<\/p>\n<p style=\"text-align: justify;\">&#8211; Multiple instances capable<\/p>\n<p style=\"text-align: justify;\">&#8211; Small, smaller, smallest<\/p>\n<p style=\"text-align: justify;\">I&#8217;m not sure if I met the last requirement, but I guess I did it for the others.<\/p>\n<h3 style=\"text-align: justify;\">Object oriented<\/h3>\n<p style=\"text-align: justify;\">It is. No more thing to say<\/p>\n<h3 style=\"text-align: justify;\">Flexible<\/h3>\n<p style=\"text-align: justify;\">I think yes, but what does it mean &#8220;flexible&#8221;. Of course it is not possible to think that it will fit any possible use, but will cover at least the following wide range of situations: anytime you have to manage information coming from a server to be placed inside a &lt;div&gt; or &lt;span&gt; (or similar) tag, then you can use this object.<\/p>\n<p style=\"text-align: justify;\">One more meaning of &#8220;flexible&#8221; is that you can also reuse it also outside this framework, with very few and easy modifications.<\/p>\n<h3 style=\"text-align: justify;\">Multiple Instances<\/h3>\n<p style=\"text-align: justify;\">Generally speaking, you can use how may instances of the object, is just a matter of browser or of\u00a0 server whether it can manage a huge numbers of requests. But, do you really need something like that?<\/p>\n<h2 style=\"text-align: justify;\">The ajaxObject object<\/h2>\n<p style=\"text-align: justify;\">First of all I have to thank\u00a0 this <a href=\"http:\/\/www.hunlock.com\/blogs\/The_Ultimate_Ajax_Object\">Article<\/a>, since part of code is coming from this idea and I suggest everybody to read, since it&#8217;s really well written.<\/p>\n<p style=\"text-align: justify;\">Using the object\u00a0 is very simple and common.<\/p>\n<p style=\"text-align: justify;\">Firstly you have to initiate a new instance, then you can make the request. That&#8217;s all.<\/p>\n<p style=\"text-align: justify;\">You don&#8217;t need to create code to manage timeout, a very simple (but effective) engine to generate a kind of &#8220;progress bar&#8221; is available, and the result can be automatically placed in you &lt;div&gt; or &lt;span&gt;<\/p>\n<p style=\"text-align: justify;\">But, if you need something more advanced, you have access to hooks for result and timeout callback functions.<\/p>\n<h3 style=\"text-align: justify;\">The script<\/h3>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;width:90%;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/>137<br \/>138<br \/><\/div><\/td><td><div class=\"javascript codecolorer\"><span class=\"coMULTI\">\/* *********************************************************<br \/>\nVersion 0.3<br \/>\nRel. Notes 0.2 added showprogressbar property to enable\/disable the progress bar;<br \/>\n0.3 bug fix to close progress bar was called showprogress.stop() that dosen't exist instead of showprogressbar.stop();<br \/>\n<br \/>\nAJAX object with multiple instaces support<br \/>\nParameters: url the url of ajax request i.e. the server<br \/>\ndefOutId the ID of the HTML section where output will be displayed, if null no output<br \/>\ncallbackFunction function that is called after response has been received. can be null or not present<br \/>\nProperties timeout in milliseconds for request<br \/>\nstattusbar true or false enable or disable the use of browser status bar<br \/>\nMethods update(passData,postMethod) set the call parameters, the post method and make the call.<br \/>\n<br \/>\n*********************************************************\/<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> ajaxObject<span class=\"br0\">&#40;<\/span>url<span class=\"sy0\">,<\/span> defOutId<span class=\"sy0\">,<\/span> callbackFunction<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">var<\/span> that<span class=\"sy0\">=<\/span><span class=\"kw1\">this<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">timeout<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">10000<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Default timeout is 10 Seconds<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">statusbar<\/span><span class=\"sy0\">=<\/span><span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Set to false if you don't want activities to be displayed on browser status bar<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">bartimer<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">125<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ millisecond of progress bar timer.<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">updating<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Used to verify if a request is already running<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">urlCall<\/span> <span class=\"sy0\">=<\/span> url<span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Ajax server url<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">defOut<\/span><span class=\"sy0\">=<\/span>defOutId<span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Set the delault output ID<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">showprogressbar<\/span><span class=\"sy0\">=<\/span><span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/So progressbar is shown<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">callback<\/span> <span class=\"sy0\">=<\/span> callbackFunction <span class=\"sy0\">||<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Set the callback function activated when request is completed<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ Define the function that will be called on request timeout<\/span><br \/>\n<span class=\"kw1\">var<\/span> toutfunc<span class=\"sy0\">=<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">updating<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">\/\/if there is a pending reqyest abort AJAX request<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\nthat.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">abort<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ abort pending request<\/span><br \/>\nthat.<span class=\"me1\">updating<\/span><span class=\"sy0\">=<\/span><span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ a new call can be done<\/span><br \/>\nthat.<span class=\"me1\">showprogressbar<\/span>.<span class=\"me1\">stop<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ No more need for progress bar<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">defOut<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span>document.<span class=\"me1\">getElementById<\/span><span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">defOut<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">innerHTML<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;Timeout&quot;<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/ Write the message<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/ Set timers<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">ttimeout<\/span><span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> timerObject<span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">timeout<\/span><span class=\"sy0\">,<\/span>toutfunc<span class=\"sy0\">,<\/span><span class=\"kw2\">null<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Set timeout function<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">ttimeout<\/span>.<span class=\"me1\">repeat<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Just one shot<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">progressbar<\/span><span class=\"sy0\">=<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">showprogressbar<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">progressbar<\/span><span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> timerObject<span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">bartimer<\/span><span class=\"sy0\">,<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">defOut<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Set timer for progress bar<\/span><br \/>\n<span class=\"co1\">\/\/ Now create an XML HTTP Request<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>window.<span class=\"me1\">XMLHttpRequest<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> XMLHttpRequest<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/ Not MS Browser<\/span><br \/>\n<span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> ActiveXObject<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Microsoft.XMLHTTP&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/MS Browser<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">\/* *********************************************************<br \/>\nAJAX execution update method Execute a call.<br \/>\nParameters: passData parameters of the call.<br \/>\npostMethod<br \/>\n*********************************************************\/<\/span><br \/>\n<br \/>\najaxObject.<span class=\"kw1\">prototype<\/span>.<span class=\"me1\">update<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span>passData<span class=\"sy0\">,<\/span>postMethod<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">var<\/span> that<span class=\"sy0\">=<\/span><span class=\"kw1\">this<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">updating<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/ request already pending, non need to repeat<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span><span class=\"sy0\">==<\/span><span class=\"kw2\">null<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> alert<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;AJAX not supported by browser&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/ AJAX not supported<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">onreadystatechange<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">\/\/This function will be called any time AJAX status changes<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">readyState<\/span><span class=\"sy0\">==<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">progressbar<\/span><span class=\"br0\">&#41;<\/span> that.<span class=\"me1\">progressbar<\/span>.<span class=\"me1\">stop<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ No more need for progress bar<\/span><br \/>\nthat.<span class=\"me1\">ttimeout<\/span>.<span class=\"me1\">stop<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Disable timeout<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">statusbar<\/span><span class=\"br0\">&#41;<\/span> window.<span class=\"me1\">status<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;Done!&quot;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Update the browser status bar<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">defOut<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\ndocument.<span class=\"me1\">getElementById<\/span><span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">defOut<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">innerHTML<\/span><span class=\"sy0\">=<\/span>that.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">responseText<\/span><span class=\"sy0\">;<\/span><br \/>\ndocument.<span class=\"me1\">getElementById<\/span><span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">defOut<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">style<\/span>.<span class=\"me1\">visibility<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;visible&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/Write the result<\/span><br \/>\nthat.<span class=\"me1\">callback<\/span><span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">responseText<\/span><span class=\"sy0\">,<\/span>that.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">status<\/span><span class=\"sy0\">,<\/span>that.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">responseXML<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Finally cal an external function<\/span><br \/>\nthat.<span class=\"me1\">updating<\/span><span class=\"sy0\">=<\/span><span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Now a new call can be done<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">updating<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <span class=\"kw4\">Date<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Used to prevent cache errors adding this to the request, so the request will be new anytime<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"co2\">\/post\/i<\/span>.<span class=\"me1\">test<\/span><span class=\"br0\">&#40;<\/span>postMethod<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">\/\/ POST method<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">var<\/span> uri<span class=\"sy0\">=<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">urlCall<\/span><span class=\"sy0\">+<\/span><span class=\"st0\">'?'<\/span><span class=\"sy0\">+<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">updating<\/span>.<span class=\"me1\">getTime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">open<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;POST&quot;<\/span><span class=\"sy0\">,<\/span> uri<span class=\"sy0\">,<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">setRequestHeader<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Content-type&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;application\/x-www-form-urlencoded&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">setRequestHeader<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Content-Length&quot;<\/span><span class=\"sy0\">,<\/span> passData.<span class=\"me1\">length<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">send<\/span><span class=\"br0\">&#40;<\/span>passData<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Send the request<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw1\">else<\/span> <span class=\"co1\">\/\/ GET method (default)<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">var<\/span> uri<span class=\"sy0\">=<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">urlCall<\/span><span class=\"sy0\">+<\/span><span class=\"st0\">'?'<\/span><span class=\"sy0\">+<\/span>passData<span class=\"sy0\">+<\/span><span class=\"st0\">'&amp;amp;timestamp='<\/span><span class=\"sy0\">+<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">updating<\/span>.<span class=\"me1\">getTime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">open<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;GET&quot;<\/span><span class=\"sy0\">,<\/span> uri<span class=\"sy0\">,<\/span> <span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">AJAX<\/span>.<span class=\"me1\">send<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Send the request<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">ttimeout<\/span>.<span class=\"me1\">start<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Start timeout timer<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">showprogressbar<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">progressbar<\/span>.<span class=\"me1\">start<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Start the progress bar<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">statusbar<\/span><span class=\"br0\">&#41;<\/span> window.<span class=\"me1\">status<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;Processing &quot;<\/span><span class=\"sy0\">+<\/span> uri <span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Update browser status bar<\/span><br \/>\n<span class=\"kw1\">return<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">\/* *********************************************************<br \/>\ntimer Object used for timeout and progress bar in ajax object.<br \/>\nMultiple instances are supported<br \/>\nParameters: timeout in milliseconds<br \/>\ntimerfunc function called when timer expires can be null<br \/>\noutid id of where to display the progress bar, can be null.<br \/>\nproperties<br \/>\ncounter: incremented each time timeout expires<br \/>\ntimeout: timeout<br \/>\nrepeat: if 1 any time timer expires is resetted, if 0 just one shot.<br \/>\nprogbar: array of elements to be displayed sequentially as a progress bar<br \/>\nmethods<br \/>\nstart(): Activate the timer<br \/>\nstop(): stop the timer<br \/>\n<br \/>\n*********************************************************\/<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> timerObject<span class=\"br0\">&#40;<\/span>timeout<span class=\"sy0\">,<\/span>timerfunc<span class=\"sy0\">,<\/span>outid<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">var<\/span> that<span class=\"sy0\">=<\/span><span class=\"kw1\">this<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">counter<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Initialize the counter<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">timeout<\/span><span class=\"sy0\">=<\/span>timeout<span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Set timeout value (milliseconds)<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">repeat<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ So the timer will be repeted<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">start<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> that.<span class=\"me1\">timer<\/span><span class=\"sy0\">=<\/span>setTimeout<span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">TimerCall<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">timeout<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/Function to activate timer<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">stop<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> clearTimeout<span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">timer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"co1\">\/\/Function to stop time<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">tfunc<\/span> <span class=\"sy0\">=<\/span> timerfunc <span class=\"sy0\">||<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Set the timer function<\/span><br \/>\n<span class=\"co1\">\/\/ this.progbar=new Array(&quot;.&quot;,&quot;..&quot;,&quot;...&quot;,&quot;....&quot;,&quot;.....&quot;,&quot;....&quot;,&quot;...&quot;,&quot;..&quot;,&quot;.&quot;);<\/span><br \/>\n<span class=\"co1\">\/\/ The progress bar<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">progbar<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> <span class=\"kw4\">Array<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;|&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;|||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;||||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;|||||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;||||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;|||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;||&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;|&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">this<\/span>.<span class=\"me1\">TimerCall<\/span><span class=\"sy0\">=<\/span><span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">\/\/Timer event function<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"kw1\">var<\/span> chars<span class=\"sy0\">=<\/span>that.<span class=\"me1\">progbar<\/span><span class=\"sy0\">;<\/span><br \/>\nthat.<span class=\"me1\">counter<\/span><span class=\"sy0\">++;<\/span> <span class=\"co1\">\/\/Increase counter<\/span><br \/>\n<span class=\"co1\">\/\/Display new position of progress<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>outid<span class=\"br0\">&#41;<\/span> document.<span class=\"me1\">getElementById<\/span><span class=\"br0\">&#40;<\/span>outid<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">innerHTML<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;Processing &quot;<\/span><span class=\"sy0\">+<\/span>chars<span class=\"br0\">&#91;<\/span>that.<span class=\"me1\">counter<\/span> <span class=\"sy0\">%<\/span> chars.<span class=\"me1\">length<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\nthat.<span class=\"me1\">tfunc<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Call timer function<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>that.<span class=\"me1\">repeat<\/span><span class=\"br0\">&#41;<\/span> that.<span class=\"me1\">start<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ If needed restart the timer<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\">Well, I think that the code is well documented, so you can have a look and easily understand how it works. So In the next few lines, I will make some examples to explain hot to use it.<\/p>\n<p style=\"text-align: justify;\">Note that the javascript code shall be placed inside &lt;head&gt;&lt;\/head&gt; tags.<\/p>\n<p style=\"text-align: justify;\">The firs thing, as I said, is to create an instance of the object. This is very simple to do, you just need to write a very small code that you can place wherever you prefer inside your html:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/><\/div><\/td><td><div class=\"javascript codecolorer\"><span class=\"sy0\">&lt;<\/span>p style<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text-align: justify;&quot;<\/span><span class=\"sy0\">&gt;&amp;<\/span>lt<span class=\"sy0\">;<\/span>script type<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span> <span class=\"sy0\">&amp;<\/span>gt<span class=\"sy0\">;&lt;\/<\/span>p<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>p style<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;padding-left: 30px; text-align: justify;&quot;<\/span><span class=\"sy0\">&gt;<\/span><span class=\"kw1\">var<\/span> af1<span class=\"sy0\">=<\/span><span class=\"kw1\">new<\/span> ajaxObject<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;ajax.php&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&quot;ID1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;&lt;\/<\/span>p<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>p style<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text-align: justify;&quot;<\/span><span class=\"sy0\">&gt;&amp;<\/span>lt<span class=\"sy0\">;\/<\/span>script<span class=\"sy0\">&amp;<\/span>gt<span class=\"sy0\">;&lt;\/<\/span>p<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\">This code is setting the general parameters of your object. &#8220;ajax.php&#8221; is your server side application while &#8220;ID1&#8221; is the id of you &lt;span&gt;,&lt;div&gt;, &#8230; tag,\u00a0 where answer coming from server will be placed.<\/p>\n<p style=\"text-align: justify;\">Now you have an ajax object called &#8220;af1&#8221;.<\/p>\n<p style=\"text-align: justify;\">Next, you have to create the space where to place the results:<\/p>\n<div class=\"codecolorer-container html4strict default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"html4strict codecolorer\"><span class=\"sc2\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a> <span class=\"kw3\">style<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text-align: justify;&quot;<\/span>&gt;<\/span><span class=\"sc1\">&amp;lt;<\/span>div id=&quot;ID1&quot;<span class=\"sc1\">&amp;gt;&amp;lt;<\/span>\/div<span class=\"sc1\">&amp;gt;<\/span><span class=\"sc2\">&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a>&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\">will do exactly this.<\/p>\n<p style=\"text-align: justify;\">Finally you need something to generate the call. You can use any possible event to call the upload method. For example you can use the &#8220;onload&#8221; in the &lt;body&gt; tag, or the &#8220;onclick&#8221; wherever it is allowed.<\/p>\n<div class=\"codecolorer-container html4strict default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"html4strict codecolorer\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a> <span class=\"kw3\">style<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text-align: justify;&quot;<\/span>&gt;&amp;lt;body <span class=\"kw3\">onload<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'af1.update(&quot;t=1&quot;);'<\/span>&amp;gt;&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a>&gt;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\">will make the request when the page is loaded<\/p>\n<p style=\"text-align: justify;\">or<\/p>\n<div class=\"codecolorer-container html4strict default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"html4strict codecolorer\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a> <span class=\"kw3\">style<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text-align: justify;&quot;<\/span>&gt;&amp;lt;p <span class=\"kw3\">onclick<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'af1.update(&quot;t=1&quot;);'<\/span>&amp;gt;Click to <span class=\"kw3\">start<\/span> ajax request <span class=\"nu0\">2<\/span> &amp;lt;<span class=\"sy0\">\/<\/span>p&amp;gt;&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a>&gt;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\">will make the request any time you will click on the test. The update method first parameter are the parameters passed to the server side application.<\/p>\n<p style=\"text-align: justify;\">That&#8217;s really all and it&#8217;s free.<\/p>\n<p style=\"text-align: justify;\">Below I paste an example of html page and a small server side application to test the script.<\/p>\n<p style=\"text-align: justify;\"><em><\/p>\n<div class=\"codecolorer-container html4strict default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/><\/div><\/td><td><div class=\"html4strict codecolorer\">&amp;lt;html&amp;gt;<br \/>\n&amp;lt;head&amp;gt;<br \/>\n&amp;lt;script <span class=\"kw3\">src<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;ajax.js&quot;<\/span>\u00a0 <span class=\"kw3\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span>&amp;gt;&amp;lt;<span class=\"sy0\">\/<\/span>script&amp;gt;<br \/>\n&amp;lt;script <span class=\"kw3\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span> &amp;gt;<br \/>\nvar af1<span class=\"sy0\">=<\/span>new ajaxObject<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;ajax.php&quot;<\/span>,<span class=\"st0\">&quot;ID1&quot;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nvar af2<span class=\"sy0\">=<\/span>new ajaxObject<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;ajax.php&quot;<\/span>,<span class=\"st0\">&quot;ID2&quot;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\naf2.statusbar<span class=\"sy0\">=<\/span>false;<br \/>\nfunction startAjax<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\naf1.update<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;t=15&quot;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\naf2.update<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;t=1&quot;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n&amp;lt;<span class=\"sy0\">\/<\/span>script&amp;gt;&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/p.html\"><span class=\"kw2\">p<\/span><\/a>&gt;<br \/>\n&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;&amp;lt;<span class=\"sy0\">\/<\/span>head&amp;gt;&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;<br \/>\n<br \/>\n&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;&amp;lt;body <span class=\"kw3\">onload<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'startAjax();'<\/span>&amp;gt;<br \/>\n&amp;lt;div&amp;gt;&amp;lt;<span class=\"kw3\">span<\/span> <span class=\"kw3\">onclick<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'af1.update(&quot;t=15&quot;);'<\/span>&amp;gt;Click to <span class=\"kw3\">start<\/span> ajax request <span class=\"nu0\">1<\/span> &amp;lt;<span class=\"sy0\">\/<\/span>span&amp;gt;&amp;lt;<span class=\"kw3\">span<\/span> <span class=\"kw3\">id<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;ID1&quot;<\/span>&amp;gt;First&amp;lt;<span class=\"sy0\">\/<\/span>span&amp;gt;&amp;lt;<span class=\"sy0\">\/<\/span>div&amp;gt;<br \/>\n&amp;lt;div&amp;gt;\u00a0\u00a0 \u00a0&amp;lt;<span class=\"kw3\">span<\/span> <span class=\"kw3\">id<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;ID2&quot;<\/span>&amp;gt;Second&amp;lt;<span class=\"sy0\">\/<\/span>span&amp;gt;&amp;lt;<span class=\"sy0\">\/<\/span>div&amp;gt;&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;<br \/>\n<br \/>\n&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;&amp;lt;<span class=\"sy0\">\/<\/span>body&amp;gt;&amp;lt;<span class=\"sy0\">\/<\/span>html&amp;gt;<br \/>\n&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/em.html\"><span class=\"kw2\">em<\/span><\/a>&gt;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>PHP very small application:<\/p>\n<div class=\"codecolorer-container php default\" style=\"overflow:auto;white-space:nowrap;width:90%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"sy0\">&lt;<\/span>em<span class=\"sy0\">&gt;&amp;<\/span>lt<span class=\"sy0\">;<\/span>?php<br \/>\n<a href=\"http:\/\/www.php.net\/extract\"><span class=\"kw3\">extract<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$_REQUEST<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<a href=\"http:\/\/www.php.net\/sleep\"><span class=\"kw3\">sleep<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$t<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">echo<\/span> <span class=\"st_h\">'This is server response'<\/span><span class=\"sy0\">;<\/span><br \/>\n?<span class=\"sy0\">&amp;<\/span>gt<span class=\"sy0\">;&lt;\/<\/span>em<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<h3>Updates<\/h3>\n<p>On rel. 0.2 I&#8217;ve added a property for ajaxObject called showprogressbar that enable or disable the progressbar.<\/p>\n<p>This can be useful if you periodically refresh the content and want to keep displayed the old one while retrieving the new one.<\/p>\n<p>0.3 Fixed a bug on progressbar<\/p>\n<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-bottom-right\"><a href=\"https:\/\/www.lemie5lire.com\/index.php?rest_route=wpv2posts601&print=pdf\" class=\"pdfprnt-button pdfprnt-button-pdf\" target=\"_blank\"><\/a><a href=\"https:\/\/www.lemie5lire.com\/index.php?rest_route=wpv2posts601&print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/www.lemie5lire.com\/wp-content\/plugins\/pdf-print\/images\/print.png\" alt=\"image_print\" title=\"Stampa contenuto\" \/><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>During the years I needed to use alway more often ajax implementations in web design. There are several reasons to use this technology but the first is for sure that reloading a page just to update a small quantity of data is really annoying and looks really &#8220;not professional&#8221;.<\/p>\n<p>So the first thing that you can realize in approaching ajax is that you need to write code using JavaScript, HTML and PHP or other serve side languages and you will feel fore sure much better if you can use something standard: for example a library.<\/p>\n<p>Actually, there are really tons of libraries, scripts and codes that can help you in your job, but I never found once that was exactly as I like. So I wrote something that I want to share here.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ghostkit_customizer_options":"","ghostkit_custom_css":"","ghostkit_custom_js_head":"","ghostkit_custom_js_foot":"","ghostkit_typography":"","iawp_total_views":0,"footnotes":""},"categories":[1,13],"tags":[87,86],"class_list":["post-601","post","type-post","status-publish","format-standard","hentry","category-generale","category-technologie","tag-ajax","tag-javascript"],"_links":{"self":[{"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=\/wp\/v2\/posts\/601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=601"}],"version-history":[{"count":32,"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=\/wp\/v2\/posts\/601\/revisions"}],"predecessor-version":[{"id":47479,"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=\/wp\/v2\/posts\/601\/revisions\/47479"}],"wp:attachment":[{"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lemie5lire.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}