This article mainly introduces the method of asynchronous loading of ajax images. It analyzes the principles and related implementation techniques of asynchronous loading of ajax images in detail in the form of examples. Friends in need can refer to the following
Examples of this article Ajax method for asynchronously loading images. I share it with you for your reference. The details are as follows:
Pictures are generally relatively large, so they are loaded gradually after the basic web page is loaded. The whole loading process is very unsightly, or it gradually changes from blurry to blurry. Clear, or expanded from top to bottom (of course you can also think that these are good special effects). If the dynamic replacement of the image is achieved by regularly changing the src attribute of the img, the resulting flicker will be even more unacceptable. This is not something that can be pleasant with the alt attribute.
Contact the popular AJAX technology, which is known as "no" refresh. It uses the XMLHttpRequest object to initiate an asynchronous request. After the image is loaded, it is dynamically inserted into the "foreground" HTML page. It should be able to meet the needs, but the object returned by the XMLHttpRequest object has only two attributes, responseXML and responseText. The former is an XML object, and the latter is the returned plain text content. It seems that there is no binary data required for the picture... Taking a step back, even if it can be used responseText retrieves the binary data of the image, how can we insert it into the front page? Replace the src attribute of img with the requested url?
Just do it and write an image slideshow code to verify your idea:
<html> <head> <title>Image Slide</title> <script> function makeAsyncRequest(url, callback) { var httpRequest; if (window.XMLHttpRequest) { // Mozilla, Safari, ... httpRequest = new XMLHttpRequest(); if (httpRequest.overrideMimeType) { httpRequest.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } httpRequest.onreadystatechange = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) callback(url); }; httpRequest.open('GET', url, true); httpRequest.send(''); } var i = 0; var max_i = 10; function displayImage() { var url = "./" + i + ".jpg"; makeAsyncRequest(url, function (url) { var p = document.getElementById("image"); var img = p.getElementsByTagName("img"); if (img.length == 0) { img = document.createElement("img"); while (p.childNodes.length > 0) p.removeChild(p.childNodes[0]); p.appendChild(img); } else img = img.item(0); img.src = url; if (i == max_i) i = 0; else i ++; window.setTimeout("displayImage();", 1000); }); } </script> </head> <body onload="displayImage();"> <p id="image"> </p> </body> </html>
The above code displays pictures 0.jpg - 10.jpg in a loop at a time interval of 1000 milliseconds. The effect is more obvious and flickering is indeed eliminated. So how does it work? The display of each image is divided into two steps:
Use the XMLHttpRequest object to obtain the image from the server, and cache the image to the local browser buffer.
Get the image from the local browser buffer for display.
Because the time from taking the picture to displaying it in the second step is very short, the user basically cannot detect any flicker. It can be seen that the above technology is based on the assumption that the requested image is cacheable. If the image is not cacheable, will the above code not work properly?
Let the code speak for itself and make some changes to the above code:
function displayImage() { var url = "./" + i + ".jpg"; var url = "./image.php?filename=" + i + ".jpg"; makeAsyncRequest(url, function (url) { var p = document.getElementById("image"); var img = p.getElementsByTagName("img");
Write another php script to transmit the requested image:
<?php header("Content-Type: image/jpeg"); header("Cache-Control: no-cache"); echo file_get_contents($_GET["filename"]); ?>
As expected , it flickered again...
It seems that we need to think of another way. Working behind closed doors will not work. Please ask Mr. Google for help! The hard work paid off, and I finally found it. I was overjoyed. The result still surprised me. IMG actually has an onload event callback interface. I can only be glad that my glasses are made of resin. "I am not afraid if my glasses fall off." Well, don't be afraid, don't be afraid, don't be afraid..."
What are you waiting for? Of course the code will serve you:
<html> <head> <title>Image Slide</title> <script> var i = 0; var max_i = 10; function displayImage() { var img = document.createElement("img"); img.onload = function () { var p = document.getElementById("image"); while (p.childNodes.length > 0) p.removeChild(p.childNodes[0]); p.appendChild(img); if (i == max_i) i = 0; else i ++; window.setTimeout("displayImage();", 1000); } img.src = "./" + i + ".jpg"; } </script> </head> <body onload="displayImage();"> <p id="image"> </p> </body> </html>
"She is an ungly girl!"Nothing to say, non-cacheable image Situation:
i ++; window.setTimeout("displayImage();", 1000); } img.src = "./" + i + ".jpg"; img.src = "./image.php?filename=" + i + ".jpg"; } </script> </head>
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
AJAX request queue implementation
Summary of several methods of using ajax to submit forms asynchronously
How to solve the problem of arrays in AJAX requests
The above is the detailed content of Ajax asynchronous loading image example analysis. For more information, please follow other related articles on the PHP Chinese website!