Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Menjanjikan Permintaan XHR Asli Menggunakan JavaScript?

Bagaimana untuk Menjanjikan Permintaan XHR Asli Menggunakan JavaScript?

DDD
Lepaskan: 2024-12-06 06:31:12
asal
1061 orang telah melayarinya

How to Promisify Native XHR Requests Using JavaScript?

Cara Menjanjikan Native XHR

Latar Belakang

Dalam pembangunan frontend moden, janji telah menjadi alat penting untuk mengurus operasi tak segerak. Walaupun banyak rangka kerja menyediakan mekanisme terbina dalam untuk janji janji, adalah mungkin untuk mencapai fungsi ini dengan kod asli juga. Panduan ini menunjukkan cara menukar permintaan XHR (XMLHttpRequest) asli kepada janji.

Langkah 1: Tentukan Fungsi Permintaan dengan Panggilan Balik

Mulakan dengan mencipta fungsi permintaan XHR asas yang menggunakan panggilan balik:

function makeRequest(method, url, done) {
  var xhr = new XMLHttpRequest();
  xhr.open(method, url);
  xhr.onload = function () {
    done(null, xhr.response);
  };
  xhr.onerror = function () {
    done(xhr.response);
  };
  xhr.send();
}
Salin selepas log masuk

Langkah 2: Perkenalkan Janji Pembinaan

Untuk mengubah fungsi ini menjadi versi yang dijanjikan, manfaatkan pembina janji:

function makeRequest(method, url) {
  return new Promise(function (resolve, reject) {
    var xhr = new XMLHttpRequest();
    xhr.open(method, url);
    xhr.onload = function () {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(xhr.response);
      } else {
        reject({
          status: xhr.status,
          statusText: xhr.statusText
        });
      }
    };
    xhr.onerror = function () {
      reject({
        status: xhr.status,
        statusText: xhr.statusText
      });
    };
    xhr.send();
  });
}
Salin selepas log masuk

Langkah 3: Tingkatkan dengan Parameter dan Pilihan

Untuk meningkatkan fleksibiliti fungsi permintaan, memperkenalkan parameter untuk kaedah, url, dan pilihan pilihan objek:

function makeRequest(opts) {
  return new Promise(function (resolve, reject) {
    var xhr = new XMLHttpRequest();
    xhr.open(opts.method, opts.url);
    xhr.onload = function () {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(xhr.response);
      } else {
        reject({
          status: xhr.status,
          statusText: xhr.statusText
        });
      }
    };
    xhr.onerror = function () {
      reject({
        status: xhr.status,
        statusText: xhr.statusText
      });
    };
    if (opts.headers) {
      Object.keys(opts.headers).forEach(function (key) {
        xhr.setRequestHeader(key, opts.headers[key]);
      });
    }
    var params = opts.params;
    if (params && typeof params === 'object') {
      params = Object.keys(params).map(function (key) {
        return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
      }).join('&');
    }
    xhr.send(params);
  });
}
Salin selepas log masuk

Penggunaan

Dengan fungsi makeRequest yang dijanjikan, XHR boleh dilakukan dengan lancar sebagai operasi tak segerak:

makeRequest({
  method: 'GET',
  url: 'http://example.com'
})
.then(function (datums) {
  return makeRequest({
    method: 'POST',
    url: datums.url,
    params: {
      score: 9001
    },
    headers: {
      'X-Subliminal-Message': 'Upvote-this-answer'
    }
  });
})
.catch(function (err) {
  console.error('Augh, there was an error!', err.statusText);
});
Salin selepas log masuk

Pendekatan Alternatif

Alternatif kepada janji janji adalah menggunakan API pengambilan, yang menyediakan sokongan terbina dalam untuk janji. Walau bagaimanapun, perlu diingat bahawa pengambilan mungkin tidak disokong dalam semua penyemak imbas dan mungkin memerlukan poliisi.

Atas ialah kandungan terperinci Bagaimana untuk Menjanjikan Permintaan XHR Asli Menggunakan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan