账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    promise 的ajax 封装
    19
    0
    let ajax = (obj) => {
        return new Promise((resolve, reject) => {
            let method = obj.method || 'GET';
            let xhr = null;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            } else {
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }
            xhr.onReadyStateChange = () => {
                if (xhr.readyState == 4) {
                    if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
                        resolve(xhr.responseText);
                    } else {
                        reject(xhr.statusText);
                    }
                }
            }
            if (method == 'POST') {
                xhr.open('POST', obj.url, true);
                
                
                //   =================下面两行为什么 get 时 没有  是没有必要吗?   
                xhr.responseType = "json";
                xhr.setRequestHeader("Accept", "application/json");
                xhr.send(obj.data);
            } else {
                let query = '';
                for (let key in obj.data) {
                //================================为什么用encodeURIComponent  可以直接写吗
                    query += '&' + encodeURIComponent(key) + "=" + encodeURIComponent(obj.data[key]);
                }
                query.substring(1);
                xhr.open('GET', obj.url + '?' + query, true);
                xhr.send();
            }
        })
    }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 時間會讓俄淡忘° 普通会员 1楼

      Promise 是 Promise.js 中的一个概念,用于处理异步操作。在 JavaScript 中,通常会使用回调函数来处理异步操作,但这种方式可能会导致代码的可读性和可维护性降低。

      Promise 的优势在于,它提供了一种更清晰、更易于理解的方式来处理异步操作。Promise 的构造函数接收一个回调函数作为参数,这个回调函数将在异步操作完成后被调用。

      以下是一个使用 Promise 的 AJAX 请求封装的示例:

      ```javascript function makeAjaxRequest(url) { return new Promise((resolve, reject) => { // 这里是一个异步操作,如发送 HTTP 请求 fetch(url) .then(response => response.json()) .then(data => { // 在异步操作完成后,这个 Promise 被 resolve resolve(data); }) .catch(error => { // 在异步操作过程中,如果发生错误,这个 Promise 被 reject reject(error); }); }); }

      // 使用示例 makeAjaxRequest('https://api.example.com/data') .then(data => { console.log(data); }) .catch(error => { console.error(error); }); ```

      在这个示例中,我们首先创建了一个新的 Promise 对象,然后在这个 Promise 对象中执行了一个异步操作。如果异步操作成功,Promise 就会被 resolve,否则 Promise 就会被 reject。这样,我们就可以在 Promise 对象的 resolve 或 reject 方法中处理异步操作的结果。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部