ReferenceError: XMLHttpRequest is not defined(解决)

在JavaScript脚本中遇到ReferenceError: XMLHttpRequest is not defined的错误是因为xmlhttprequest不是Node.js内置的。解决方法是在本地浏览器环境中使用,或者通过npm安装xmlhttprequest模块。文章还介绍了同步和异步方法的概念,并展示了如何在浏览器中执行异步操作,包括使用Promise进行异步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ReferenceError: XMLHttpRequest is not defined
在JS 脚本中,运行 var xhttp = new XMLHttpRequest;报错,提示:ReferenceError: XMLHttpRequest is not defined;
原因:xmlhttprequest 不是Node 内置的,需要单独安装:

安装命令:npm install xmlhttprequest

var xhr=new XMLHttpRequest()
改成

var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
 
var xhr = new XMLHttpRequest();

我就是想在本地浏览器上使用异步操作,先补补异步操作:
同步和异步通常用来形容一次方法调用。
同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作(因为用本地浏览器执行代码更直观,就不用node调试了)。而异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。
异步操作可以用时间处理函数、Promise

    const p = new Promise((resolve,reject)=>{
      // 异步操作
      setTimeout(()=>{
        console.log('用户数据')
        resolve('用户数据')
      }3000)
      
    })
    
    //!!! 调用then 方法,then方法的返回结果必须是 Promise 对象,对象状态由回调函数的返回结果决定
    // 1.如果回调函数中返回的结果是 非promise 类型的数据,状态为成功,then方法返回的Promise对象的状态为成功,值为该非Promise的数据
    //    其实函数若无返回值,默认返回了undifinded(这表示:我们可以通过Promise.resolve()将一个字符串、数字或者对象等转换成一个成功
    //    状态的Promise对象。)
    //  
    // 2.若回调函数中返回的结果是 promise对象,then方法返回的Promise对象的状态与该promise对象的状态一致,且值与该promise对象的回调函数
    //    的参数一致。
    p.then(function(value){
      console.log(value + '1' )
      return value
    },function(reason){
      console.warn(reason)
    })
    console.log('@', p)

使用本地浏览器执行后的结果如下:

@ Promise {<pending>}
 用户数据
 用户数据1

我们看到p先被打印出来,证明promise本身就是异步的,而且p本身也是一个pending状态的promise对象。(接下来看两个例子削了它)

const p = new Promise((resolve,reject)=>{
      // 异步操作
      setTimeout(()=>{
        console.log('用户数据')
        resolve('用户数据')
      },3000)
      
    })
    
    p.then(function(value){
      console.log(value + '1' )
      return value
    },function(reason){
      console.warn(reason)
    })
    console.log('@', p)

执行结果:这是后面两个数据还没刷出来时我点开了Promise****
执行结果:这是后面两个数据刷出来后我点开了Promise
在这里插入图片描述
欧了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值