Apabila menggunakan AJAX untuk interaksi maklumat, jika maklumat yang dikembalikan oleh pelayan agak besar, maka paparan penstriman lebih mesra daripada paparan bersatu selepas penghantaran selesai.
Pelaksanaan penstriman
Prinsipnya adalah untuk menetapkan pemasa, semak status objek AJAX dengan kerap dan kemas kini kandungan Jika penghantaran selesai, batalkan pemasa.
fungsi ajax_stream(url,data,elemen) {
var xmlHttp=null;
Jika (tetingkap.XMLHttpRequest)
{// kod untuk IE7, Firefox, Opera, dsb.
xmlHttp= XMLHttpRequest baharu();
}
else if (window.ActiveXObject)
{// kod untuk IE6, IE5
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
Jika (xmlHttp==null)
{
alert("Pelayar anda tidak menyokong XMLHTTP.");
element.val('Pelayar anda tidak menyokong XMLHTTP. Klik pautan LOG untuk memantau prosedur.');
Pulangan 0;
}
var xhr = xmlHttp;
xhr.open('POST', url, true);
// Jika anda perlu MENYATAKAN data seperti borang HTML, sila gunakan setRequestHeader() untuk menambah pengepala HTTP. Kemudian nyatakan data yang ingin anda hantar dalam kaedah send():
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(data);
pemasa var;
Pemasa = window.setInterval(function() {
Jika (xhr.readyState == XMLHttpRequest.DONE) {
tetingkap.clearTimeout(pemasa);
}
element.val(xhr.responseText);
}, 1000);
}
penukaran data siaran
Memandangkan penghantaran dalam pelaksanaan standard hanya boleh menerima jenis input berikut, objek data yang perlu dipindahkan perlu ditukar kepada rentetan atau format FormData terlebih dahulu Ini tidak semudah JQuery, tetapi bagaimana JQuery melaksanakannya di tengah-tengah penghantaran? Sambutan acara belum diketahui, jadi anda tidak boleh menggunakannya atau menukar semua objek kepada JSON.
batal hantar();
void hantar(data ArrayBuffer);
batal hantar(Data gumpalan);
batal hantar(Data dokumen);
void send(DOMString? data);
void hantar(data FormData);
Berikut ialah kod penukaran Jika penyemak imbas menyokong FormData, ia akan ditukar, jika tidak ia akan ditukar menjadi rentetan.
fungsi ajax_generate_data(jsobj) {
var i;
Jika (tetingkap.FormData) {
var data = new FormData();
untuk i dalam jsobj {
data.append(i,jsobj[i]);
}
} lain {
var data = '';
var datas = [];
untuk i dalam jsobj {
// untuk nilai supaya mungkin & terkandung dalam rentetan tidak memecahkan format
nilai var = encodeURIComponent(jsobj[i]);
datas.append(i '=' value);
}
data = datas.join('&')
}
console.log(data);
Kembalikan data;
}