Lorsque vous utilisez AJAX pour l'interaction d'informations, si les informations renvoyées par le serveur sont relativement importantes, l'affichage de streaming sera plus convivial par rapport à l'écran unifié une fois la transmission terminée.
Implémentation de streaming
Le principe consiste à définir une minuterie, à afficher régulièrement l'état de l'objet Ajax et à mettre à jour le contenu. Si la transmission est terminée, la minuterie sera annulée.
La copie de code est la suivante:
fonction ajax_stream (URL, data, élément) {
var xmlhttp = null;
if (window.xmlhttprequest)
{// Code pour IE7, Firefox, Opera, etc.
xmlhttp = new xmlHttpRequest ();
}
else if (window.activexobject)
{// Code pour IE6, IE5
xmlhttp = new activeXObject ("Microsoft.xmlhttp");
}
if (xmlhttp == null)
{
alert ("Votre navigateur ne prend pas en charge XMLHTTP.");
element.val («Votre navigateur ne prend pas en charge XMLHTTP. Cliquez sur le lien de journal pour surveiller la procédure.»);
retour 0;
}
var xhr = xmlhttp;
xhr.open ('post', URL, true);
// Si vous avez besoin de données de post comme les formulaires HTML, utilisez setRequestHeader () pour ajouter des en-têtes HTTP. Spécifiez ensuite les données que vous souhaitez envoyer dans la méthode Send ():
xhr.setRequestHeader ("Content-Type", "Application / X-Www-Form-Urlencoded");
xhr.send (données);
var temporisateur;
timer = window.setinterval (function () {
if (xhr.readystate == xmlhttprequest.done) {
window.cleartimeout (temporisation);
}
element.val (xhr.ResponSeText);
}, 1000);
}
Conversion post-données
Étant donné que l'envoi d'implémentations standard ne peut accepter que les types d'entrées suivants, il est nécessaire de convertir à l'avance l'objet de données en un format String ou FormData, ce qui n'est pas aussi pratique que jQuery. Cependant, on ne sait pas comment jQuery peut implémenter des réponses d'événements au milieu de la transmission, donc il ne peut pas être utilisé, et vous pouvez convertir tous les objets en JSON.
La copie de code est la suivante:
void Send ();
void Send (données ArrayBuffer);
void Send (Blob Data);
void Send (données de document);
void Send (DomString? Data);
void Send (Data FormData);
Ce qui suit est le code de conversion. Si le navigateur prend en charge FormData, il sera converti, sinon il sera converti en chaîne.
La copie de code est la suivante:
fonction ajax_generate_data (jsobj) {
var i;
if (window.formData) {
var data = new FormData ();
pour je dans jsobj {
data.append (i, jsobj [i]);
}
} autre {
var data = '';
var datas = [];
pour je dans jsobj {
// pour les valeurs afin que possible et contenue dans les chaînes ne cassent pas le format
Var Value = EncodeuRIComponent (JSOBJ [i]);
datas.append (i + '=' + valeur);
}
data = datas.join ('&')
}
console.log (données);
retourner les données;
}