如何向 javascript 类添加回调函数?

2024-01-17

javascript 中的以下代码给了我错误“this.callback 不是一个函数

function ajaxRequest()
{
    var httpObject;

    this.open = open;
    this.callback = function(){};

    function getHTTPObject()
    {
        if (window.ActiveXObject) 
            return new ActiveXObject("Microsoft.XMLHTTP");
        else if (window.XMLHttpRequest)
            return new XMLHttpRequest();
        else 
        {
            alert("Your browser does not support AJAX.");
            return null;
        }
    }

    function onstatechange()
    {
        if(httpObject.readyState == 4)
        {
            this.callback(httpObject.responseText);
        }

    }


    function open(url, callback)
    {
        httpObject = getHTTPObject();
        if (httpObject != null) 
        {
            httpObject.open("GET", url, true);
            httpObject.send(null);
            this.callback = callback;
            httpObject.onreadystatechange = onstatechange;
        }
    }
}

为什么 open 方法不将回调参数视为函数?

如果是的话为什么我不能在 onstatechange 函数中调用它?

我该如何进行这项工作?


原因是因为onstatechange被作为事件处理程序调用,并且this指针可能指向触发事件的对象,而不是ajaxRequest对象,如您所料。

下面的重写存储了this变量中的变量称为that在 onstatechange() 函数可以访问的执行上下文中。这应该可以解决问题。

总而言之,如果您没有彻底理解 Javascript 闭包和执行上下文,即使您了解,使用框架来执行 AJAX 请求也会好得多。 jQuery 和 Prototype 是不错的选择。

function ajaxRequest()
{
    var httpObject;

    this.open = open;
    this.callback = function(){};
    var that = this;

    function getHTTPObject()
    {
        if (window.ActiveXObject) 
                return new ActiveXObject("Microsoft.XMLHTTP");
        else if (window.XMLHttpRequest)
                return new XMLHttpRequest();
        else 
        {
                alert("Your browser does not support AJAX.");
                return null;
        }
    }

    function onstatechange()
    {
        if(httpObject.readyState == 4)
        {
                that.callback(httpObject.responseText);
        }

    }


    function open(url, callback)
    {
        httpObject = getHTTPObject();
        if (httpObject != null) 
        {
                httpObject.open("GET", url, true);
                httpObject.send(null);
                this.callback = callback;
                httpObject.onreadystatechange = onstatechange;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向 javascript 类添加回调函数? 的相关文章

  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 引导程序提前输入未填充承诺的响应

    我的引导程序预输入如下
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points

随机推荐

  • 如何通过 VSCode 将 Jupyter Notebook 导出为 PDF 格式? (Windows 10)

    When I try to export my Jupyter Notebook in pdf format in VSCode like this 然后我得到这个错误 导出失败 请检查 Jupyter 输出面板以获取更多详细信息 jupy
  • 在cakephp的AppController中调用AppModel函数

    我有一个希望所有控制器都能够使用的函数 因此我在 AppController 中定义了它 现在 此函数将执行的部分操作与控制器无关 因此它应该在模型中 但由于这是通用操作 因此它在 AppModel 中似乎才是正确的 我的函数如下所示 cl
  • 删除字符串 Python 中的 Unicode 代码 (\uxxx)

    我的文档中有一些 Unicode 字符串 我想要的只是删除这个 Unicode 代码或用一些空格 替换它 示例 doc Hello my name is Ruth u2026 I really like swimming and danci
  • 实体框架一对多插入 - 外键违规

    我是第一次使用实体框架 并且尝试使用集合创建一个对象 并且我希望集合中的所有对象也都在数据库中创建 但我遇到了一些外键违规 我的样本表 table APPOINTMENTS ID VAR1 DATE APPOINTMENT table GU
  • 如何在 Android 应用程序中从 Web 服务器获取数据? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在 Android 应用程序中从
  • Django - 将模型代码与数据库进行比较

    我维护一个 Django 项目 其中的数据库有几个与实际数据库不同步的模型约束 因此 例如 某些模型字段设置了 null False 但数据库允许相应的数据库列为 NULL 我很好奇 Django 或第三方 Python 脚本中是否有一个实
  • 如何为操作项(包括溢出菜单)的弹出窗口设置自定义颜色?

    背景 我正在努力为应用程序添加一些材料设计风格 因此我为操作栏和状态栏选择了不同的颜色 问题 为此 应用程序的主题是 Theme AppCompat Light DarkActionBar 并添加此主题以隐藏操作栏 因为我需要将其作为工具栏
  • 如何通过 Google Contacts API 创建新联系人?

    我正在创建一个新联系人 如中所述谷歌通讯录 API https developers google com google apps contacts v3 具体来说 我做了一个POST to https www google com m8
  • BigQuery - 从分区表中删除行

    我在 BigQuery 上有一个按日分区的表 当我尝试使用如下查询从表中删除某些行时 DELETE FROM MY DATASET partitioned table WHERE id 2374180 我收到以下错误 错误 分区表尚不支持
  • 需要在 Visual Studio 2010 中进行高效调试

    我经常使用Debug gt Exceptions gt check CLR Exceptions在调试会话期间 有时 会抛出并处理异常 但我真的想找到异常的来源 为了在不看到我不关心的第一次异常的情况下执行此操作 我启动我的应用程序 然后检
  • 使用 HTTPS 代替 HTTP

    我有一个用户必须登录的网站 我想使用 HTTPS 因此与服务器建立安全加密连接以检查用户名和密码 目前在我的服务器上我有一个名为 httpdocs 的文件夹 这是我的网站的存储位置 我还有一个名为 httpsdocs 的文件夹 现在正如我所
  • MongoDB updateMany,动态过滤字段

    使用 updateMany filter update option 时 如何为每个文档设置动态过滤字段 我有一系列这样的文档 time 1 data time 2 data time 3 data 每个都有一个唯一的时间戳 如果时间戳已经
  • 从另一个Java程序编译并运行Java程序[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 使用 CompileAndRun 类 我现在可以编译并运行我的 HelloWorld 类 现在我想用它来运行一个需要用户输入的程序 这可以是
  • 了解 MongoDB Aggregate 和 GroupBy

    我正在尝试在 MongoDB 中执行查询 首先按 id 进行分组 然后按降序排序 我这里有一个函数式 LINQ 表达式 var list this GetPackages ToList list list OrderByDescending
  • 为什么在使用自定义元素时会出现内部 Dartium 异常?

    我在控制台中看到此错误 Exception InvalidStateError Internal Dartium Exception PolymerDeclaration registerType package polymer src d
  • Maven:附加多个工件

    我有一个 Maven 项目 它使用一些自定义 jar 在任何存储库中都找不到 为了将它们与 Maven 构建一起添加 我在 Maven 中使用 Attach artifact 目标 以下是我的 pom 文件
  • 如何漂亮地打印 Golang 结构? [复制]

    这个问题在这里已经有答案了 我正在解组一个结构 我希望它以格式化的方式打印它 我的代码 https play golang org p D0KwGP6Cxa0 https play golang org p D0KwGP6Cxa0 当前产生
  • 宁静的API服务

    我正在寻找一项服务 可以用来调用基于 Web 的 REST API 基本上我想在 app init 上启动一个服务 然后我希望能够要求该服务请求一个 url 并返回结果 与此同时 我希望能够显示进度窗口或类似的东西 我目前已经创建了一个使用
  • 用酶测试连接的组件

    我正在学习采取本次测试课程 https www udemy com react testing with jest and enzyme 通过设置来测试连接的组件store factory测试助手 创建一个与我们商店的配置相匹配的测试商店
  • 如何向 javascript 类添加回调函数?

    javascript 中的以下代码给了我错误 this callback 不是一个函数 function ajaxRequest var httpObject this open open this callback function fu