XmlHttpRequest.onload 未调用

2024-02-25

我正在玩这个XmlHttpRequest事物。在一些教程和书籍中,它是onload请求完成时调用的函数。在我的小实验中,这个函数从未被调用。这是我的代码:

    window.onload = function() {
        var url = "http://www.google.com";
        var request = new XMLHttpRequest();


        request.onload = function() {
            var state = this.readyState;
            var responseCode = request.status;
            console.log("request.onload called. readyState: " + state + "; status: " + responseCode);

            if (state == this.DONE && responseCode == 200) {
                var responseData = this.responseText;
                alert("Success: " + responseData.length  + " chars received.");
            }
        };

        request.error = function(e) {
            console.log("request.error called. Error: " + e);
        };

        request.onreadystatechange = function(){
            console.log("request.onreadystatechange called. readyState: " + this.readyState);
        };

        request.open("GET", url);
        request.send(null);
    };

我正在最新的 Firefox 版本(今天刚刚更新)上对此进行测试。日志行位于onload永远不会被打印,并且我在第一行设置的断点也永远不会被命中。但是,那onreadystatechange函数被调用了两次,并且真正发出了http请求。这是 firebug 的控制台显示的内容:

    request.onreadystatechange called. readyState: 1
    GET http://www.google.com/    302 Found    174ms
    request.onreadystatechange called. readyState: 4
    NS_ERROR_FAILURE: Failure
        request.send(null);

有一个错误send线。我尝试将其更改为request.send()结果相同。

起初我认为这可能是浏览器试图阻止 XSS,所以我将我的 html 驱动程序页面移动到我的开发计算机中的 Tomcat 实例,但结果是相同的。

这个函数能保证被调用吗?正如我上面所说,它在大多数教程中都很常见,但另一方面在W3C 规范页面 http://www.w3.org/TR/XMLHttpRequest/,hello world 片段使用onreadystatechange反而:

    function processData(data) {
      // taking care of data
    }

    function handler() {
      if(this.readyState == this.DONE) {
        if(this.status == 200 &&
           this.responseXML != null &&
           this.responseXML.getElementById('test').textContent) {
          // success!
          processData(this.responseXML.getElementById('test').textContent);
          return;
        }
        // something went wrong
        processData(null);
      }
    }

    var client = new XMLHttpRequest();
    client.onreadystatechange = handler;
    client.open("GET", "unicorn.xml");
    client.send();

它检查readyState == this.DONE. DONE值为 4,这是我在日志中看到的。因此,如果这是与 XSS 相关的问题,并且浏览器阻止我连接到不同的域,那么为什么会建立实际连接并收到 DONE 状态???

PS:是的,我知道有一些强大的库可以轻松地做到这一点,但我仍然是一个 JavaScript 菜鸟,所以我想首先了解底层。


UPDATE:
我已将 URL 更改为我的域 (localhost) 内的 URL,错误消失了,但onload函数仍未被调用。在IE8下测试,无效。在 Chrome 中测试并有效。怎么样?


更新2:
在 Firefox 中再次测试,现在可以工作了。可能旧页面仍然被缓存,所以这就是为什么我无法立即注意到它。在 IE8 中仍然失败,我会尝试在较新的版本中测试它。


看起来这确实是一个 XSS 问题,并且 Firefox 阻止了onload称呼。我仍然无法理解为什么 http 网络请求实际上正在完成以及onreadystatechange被称为DONE就绪状态。

我将 URL 更改为同一域中的另一个 URL,现在它可以在 Firefox(经过一些与缓存相关的错误尝试后)和 Chrome 中使用。尽管它在 IE8 中仍然不起作用官方文档 http://msdn.microsoft.com/en-us/library/ie/ms536942%28v=vs.85%29.aspx说支持。我找到了这个答案 https://stackoverflow.com/a/5418498/813951另有说明。它看起来像onloadfunction 是一种更现代的便捷方法,检查结果的旧方法是使用onreadystatechange反而。

我想我会接受这个答案作为解决方案,除非提供更详细的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XmlHttpRequest.onload 未调用 的相关文章

  • 有没有办法根据渲染的字符串创建 DOM 对象?

    有没有办法从整个字符串而不只是innerHTML 创建DOM 对象 我有一个完整呈现的 DOM 形式的字符串
  • 不使用 PHP 提交联系表单

    我还是一名学生 今天我们的讲师告诉我们 无需使用 mailto 函数即可提交联系我们表单的唯一方法是使用 PHP 我发誓去年另一位讲师向我们展示了一种仅使用 javascript 的方法 是否可以使用基本表单和 javascript 提交反
  • 带有闭包的 JavaScript 性能

    var name function n var digits one two three four return digits n var namenew function digits one two three four return
  • 使用 Jquery 附加链接

    我正在尝试根据您所在的页面添加指向我的页面的链接 我使用 Squarespace 来构建这个网站 因此对我来说最简单的方法是使用 Javascript 或 Jquery 我认为我缺少的这个语法有问题 我已经尝试用 来打破引号 但这不起作用
  • 修复输入字段后,html5 oninvalid 不起作用

    我的表单中有这个输入代码
  • 无法在 IE 中的选择选项上使用 onmouseover 事件

    更新的代码 function getElements var x document getElementsByTagName option var el document getElementById selectDept el onmou
  • 所有事件的 HTML5 EventSource 监听器?

    我使用 EventSource 在 JavaScript 客户端应用程序中推送通知 我可以像这样附加事件监听器 source addEventListener my custom event type function e console
  • React Native TypeError:无法读取未定义的属性“createClient”

    我是 React 本机框架的新手 我使用 create react native app AwesomeProject 创建了应用程序 我想在我的项目中使用 BLE 因此我安装了 react native ble plx 模块 但是当我创建
  • 如何翻转 Twitter Bootstrap 的工具提示

    我正在使用 Twitter 的 Bootstrap 来实现工具提示 目前 工具提示显示在链接上方 我希望工具提示出现在链接下方 我该怎么做呢 我正在触发工具提示 它明确指出 底部 但它不想为我工作 tooltip tooltip place
  • 将字符串(是一个函数)转换回 Javascript 中的函数

    我在下面将此函数作为字符串 我如何将其转换回函数 我正在从 JQuery 事件中提取事件处理程序 我想将它们存储为字符串 然后将它们转换回来 因为它们将保存在 mySQL 中 function if GActiveClick return
  • 如何在 Angular 2 应用程序中使 DateAdapter 单例?

    我正在开发一个带有延迟加载模块的 Angular 7 应用程序 我也使用有角度的材料组件 我想在日期选择器组件中本地化并支持多个区域设置 当应用程序语言发生变化时 我想在整个应用程序中全局更改它 可以通过 DateAdapter setLo
  • 在 JQuery ui 自动完成中显示图像

    我有一个带有 JQuery ui 自动完成功能的脚本 可以完美运行 有一个显示用户名字和姓氏的搜索过程 但在我的数据库中 还有用户的图片 我想将其显示在带有名字和姓氏的建议中 数据库中pic包含图片url 剧本 function searc
  • 动态更改 vuejs 2 中的选择输入选项

    如何动态更改选择下拉 v model 中的选项 我有 2 个选择输入 其中一个应该根据其他输入进行更改 例如 如果我选择 水果 则选择显示水果 如果我选择 蔬菜 则选择显示蔬菜 我不使用Vuejs 但查看文档后 var TypesArr F
  • 我可以在不同浏览器中获得一致的 CSS 颜色吗?

    我正在测试一个新网站 并且我有一个 div background color bbf6bb 这对我来说似乎无害 然而 在我的 MacBook Pro 上 Firefox 3 6 与 Safari 4 中的颜色看起来非常不同 在 Safari
  • jquery ajax加载后丢失CSS

    大家知道如何解决 load Ajax 请求后的 css 问题吗 例如 如果我想从网页加载 DIV 在我的 Ajax 请求之后 container load path to div div id 我丢失了与该 div 关联的所有 css 和脚
  • Socket.io 与服务器离线连接

    如何检测服务器是否离线或由于其他原因无法连接 我的代码看起来像这样 this socket io connect connectionInfo reconnect false 它不会抛出任何错误 因此 try catch 子句不起作用 Us
  • 动态 dom 操作后,如何在浏览器历史记录中保留 dom 状态?

    是否有一个通用的解决方案来保留 dom 状态 以便当用户使用后退 前进返回页面时 整个页面处于他们离开时的确切状态 这篇文章询问并回答了为什么不同浏览器和不同 javascript 库的行为不一致 Ajax 后退按钮和 DOM 更新 htt
  • JavaScript 正则表达式两个标签之间的多行文本

    我编写了一个正则表达式来从 HTML 中获取字符串 但似乎多行标志不起作用 这是我的模式 我想将文本输入h1 tag var pattern div class box content 5 h1 lt lt h1 gt mi m html
  • 如何调试 Node.js 应用程序?

    如何调试 Node js 服务器应用程序 现在我主要使用警报调试打印语句如下 sys puts sys inspect someVariable 一定有更好的调试方法 我知道谷歌浏览器 http en wikipedia org wiki
  • 我如何用 javascript/jquery 进行两指拖动?

    我正在尝试创建当有两个手指放在 div 上时拖动 div 的功能 我已将 div 绑定到 touchstart 和 touchmove 事件 我只是不确定如何编写这些函数 就像是if event originalEvent targetTo

随机推荐

  • 存在类型表达式的 Skolem 化

    在 Scala 中 以下表达式会引发类型错误 val pair A gt String A forSome type A a Int gt a toString 19 pair 1 pair 2 正如中提到的SI 9899 https is
  • 在 C# < 4 中,如何根据参数的运行时类型分派到方法?

    我有一个对象o在运行时保证是三种类型之一A B or C 所有这些都实现了一个通用接口I 我可以控制I 但不是A B or C 因此 我可以使用空标记接口 或者以某种方式通过使用接口来利用类型中的相似性 但我无法添加新方法或更改类型中的现有
  • ash 文件的结构如何?

    我有一个使用 ash 的小型发行版 不是 busybox 我不确定如何处理点文件结构 ashrc 似乎没有被拾取 我也没有看到 bash profile 类似物 shell启动文件有默认约定吗 手册页的调用部分对此进行了介绍 profile
  • 数据字段中包含 SSD AID 的删除 APDU 命令,返回 6985

    我有一个包含 SSD 补充安全域 的 Javacard 我想删除它 通常 当我想从卡中删除小程序或包时 我会发送以下内容删除 APDU成功后命令相互认证过程 不需要 MAC 或数据字段加密 并且Security Level 0就足够了删除
  • 如何测试具有私有方法、字段或内部类的类?

    如何使用 JUnit 测试具有内部私有方法 字段或嵌套类的类 为了能够运行测试而更改方法的访问修饰符似乎很糟糕 如果你有一些遗产Java应用程序 并且您不允许更改方法的可见性 测试私有方法的最佳方法是使用反射 http en wikiped
  • UIToolBar 中的 UISegmentedControl

    我知道如何添加UISegmentedControl to a UIToolBar来自 IB 内部 但我尝试以编程方式执行相同的操作 因为我正在使用 的自定义子类UISegmentedControlwith 没有 XIB 这是代码UISegm
  • Haskell 中 ++ 和 : 有什么区别?

    我不明白这个 Prelude gt hi there hithere Prelude gt hi there
  • python循环创建我知道它很简单但我不知道出了什么问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 python 新手尝试创建 while 循环来打印 1 到 10 而不仅仅是 10 I 0 while I 10 I 1 prin
  • 需要帮助在 Python 中添加循环来重新启动程序

    到目前为止 这就是我所得到的 import random answer1 Absolutely answer2 No way Pedro answer3 Go for it tiger answer4 There s different w
  • ASP.NET MVC 样式验证错误?

    ASP NET MVC 的验证错误可以设置样式吗 在哪里 我尝试在 Site css 中编辑 input validation error 类 但这没有任何效果 pom 如果你的风格 field validation error那么这将更改
  • IL 中的 if 是什么样的?

    一个是什么意思if语句编译成 IL 后是什么样子 这是 C 中非常简单的构造 有人能给我一个更抽象的定义吗 这里有一些if语句以及它们如何转换为 IL ldc i4 s 0x2f var i 47 stloc 0 ldloc 0 if i
  • 如何将录制的视频保存到相册中?

    以下代码是将相机拍摄的图像保存到相册中 if mediaType isEqualToString NSString kUTTypeImage image info objectForKey UIImagePickerControllerEd
  • 为什么 Kotlin lang 只允许项目中只有一个 main 函数?

    这是否剥夺了 java 中具有多个主入口点的特性 这些入口点可以在需要时调用 UPDATE Kotlin 的最新版本允许多个main即使在同一个包中也可以运行 如果它们位于不同的文件中 项目中可以有多个主函数 但每个主函数只能有一个pack
  • 纯 CSS 使字体大小根据动态字符数量进行响应

    我知道用 Javascript 可以很容易地解决这个问题 但我只对纯 CSS 解决方案感兴趣 我想要一种动态调整文本大小的方法 以便它始终适合固定的 div 这是示例标记 div style width 200px height 1em p
  • JavaScript 跨浏览器:将字符串视为数组是否安全?

    这段代码在所有主流浏览器中都安全吗 var string 123 alert string 1 2 should alert true 不 这不安全 Internet Explorer 7 不支持按索引访问字符串 你必须使用charAt兼容
  • 如何在 swiftui 中添加自定义圆形滑动操作?

    在我的 SwiftUI 应用程序中 我想在 ListView 中设计圆形滑动操作 如以下示例所示 天气应用程序 iOS 15 我知道您可以添加这样的自定义操作 List Text Pepperoni pizza swipeActions B
  • PHP 或 MySQL 中的业务逻辑?

    在具有合理流量的网站上 如果将应用程序 业务逻辑编写为存储过程 触发器和视图 而不是编写在 PHP 代码本身中 这会重要吗 牢记可扩展性的最佳方法是什么 我无法向您提供统计数据 但除非您计划将来将 PHP 更改为另一种语言 否则我可以说将业
  • 使用 graph api 2.2 从 android 中的 facebook sdk 4.0.1 获取好友列表

    我在进行一些搜索后用于获取列表的代码如下 GraphRequestBatch batch new GraphRequestBatch GraphRequest newMyFriendsRequest accessToken new Grap
  • pg_dump 忽略表顺序?

    我最近一直在玩 PostgreSQL 并且无法理解如何备份和恢复单个表 我使用 pgadmin3 备份数据库中的单个表 以便将其复制到不同的服务器 当我尝试对文件执行 pg restore 时 收到错误消息 指出该序列不存在 pg rest
  • XmlHttpRequest.onload 未调用

    我正在玩这个XmlHttpRequest事物 在一些教程和书籍中 它是onload请求完成时调用的函数 在我的小实验中 这个函数从未被调用 这是我的代码 window onload function var url http www goo