- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我从 w3schools 拼凑的 XMLHttpRequest 示例
<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
var T="nothing";
xmlhttp=new XMLHttpRequest();
xmlhttp.overrideMimeType('text/plain'); // don't sc
xmlhttp.onreadystatechange=function()
{
alert ("rdystate: " + xmlhttp.readyState);
alert ("status: " + xmlhttp.status);
alert ("Text: " + xmlhttp.statusText);
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
T = xmlhttp.responseText;
}
}
xmlhttp.open("GET","SBL_PROBES.htm",true);
xmlhttp.send(null);
//T = xmlhttp.responseText;
alert(T);
}
</script>
</head>
<body>
<h2>Using the XMLHttpRequest object</h2>
<div id="myDiv"></div>
<button type="button" onclick="loadXMLDoc()">CHange Content</button>
</body>
</html>
XMLHttpRequest 总是返回零状态。
Firefox 的错误控制台中没有显示任何内容。
如果我通过更改线路将请求更改为同步请求
xmlhttp.open("GET","SBL_PROBES.htm",true);
到
xmlhttp.open("GET","SBL_PROBES.htm",false);
并取消注释该行
//T = xmlhttp.responseText;
返回请求文件的文本。
HTM 和文件位于同一目录中。如果您尝试这样做,您还需要一个文件 SBL_PROBES.htm,它的内容无关紧要。
我使用的是 Firefox 3.6.22。
这可能是跨域问题吗?如果是这样,为什么它作为同步请求工作?
最佳答案
您可以在 if 语句中使用函数。当 readystate 变为 4 时执行此函数。
var handleResponse = function (status, response) {
alert(response)
}
var handleStateChange = function () {
switch (xmlhttp.readyState) {
case 0 : // UNINITIALIZED
case 1 : // LOADING
case 2 : // LOADED
case 3 : // INTERACTIVE
break;
case 4 : // COMPLETED
handleResponse(xmlhttp.status, xmlhttp.responseText);
break;
default: alert("error");
}
}
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=handleStateChange;
xmlhttp.open("GET","SBL_PROBES.htm",true);
xmlhttp.send(null);
您的旧代码执行了一个异步调用并继续执行 alert 语句。此时T是空的。
好的,我将稍微解释一下整个过程是如何工作的:
首先我们定义了两个回调函数,我们稍后在请求中调用它们,名为 handleResponse 和 handleStateChange。
然后我们创建一个对象,代表 XMLHttpRequest
var xmlhttp=new XMLHttpRequest();
这将导致一个对象如下(简化):
XMLHttpRequest { status=0, readyState=0, multipart=false, onreadystatechange=handleEvent()}
使用 open(...) 函数调用,您可以为请求设置参数:
xmlhttp.open("GET","SBL_PROBES.htm",true);
这意味着,执行异步 GET 请求以获取页面 SBL_PROBES.htm然后调用 send(...) 函数来触发请求本身。
我们为onreadystatechange注册了一个回调函数,可以想象,这其实就是一个eventHandler。每次状态改变时都会调用此函数。 (这就像你在表单中注册一个回调函数到 onKeyUp 事件一样,每次你的键上升时都会触发这个回调:))
您的问题唯一感兴趣的情况是状态 4。因此 handleRequest 回调函数仅在状态 4 中被调用。此时您的 Request 实际上有一个结果,并且还有一个状态。 (状态表示您的网络服务器返回状态代码 200=ok、404=not found 等)
这并不是 ajax 背后的所有魔法,但应该给您一个简单的概述,即幕后实际发生的事情。在网络服务器上测试它很重要,不要使用 file://进行测试。
如果您需要更多详细信息,请告诉我。
关于javascript - XMLHttpRequest 异步不工作,总是返回状态 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393484/
我只需要以下代码的清晰解释来创建 XMLHttpRequest . var xhr = false; if (window.XMLHttpRequest) { xhr = new XMLHtt
我无法让 XMLHttpRequest 对象在我正在编写的仪表板小部件中正常工作。我将其隔离为一个在 main.js 文件的全局范围内不起作用的简单示例: xhr = new XMLHttpR
首先,如果我要说的没有任何意义,请允许我道歉。我已经离开了我的舒适区,我真的不知道我在做什么。照这样说... 我正在使用 Google Drive File Picker library允许用户从他们
我还有一个问题。 XMLhttpRequests 困扰着我。一切现在都在数据库中,但我需要这些数据来更新我的页面以加载或重新加载第一页。 XHR 在触发 PHP 脚本的 JavaScript 文件中触
我试图了解从 WebAssembly 调用 XmlHttpRequest 的最佳和最有效的方法是什么。 我找到了 http://webassembly.org/getting-started/js-a
我有兴趣只提取 XHR 的网址,而不是网页中的每个网址: 这就是我提取页面中每个 url 的代码: import scrapy import json from scrapy.selector imp
有没有办法检测 XmlHttpRequest 无法解析 URL?使用错误的 URL 调用 Open(...) 时似乎不会抛出异常。 最佳答案 HTTP 状态代码将为零。 这适用于无法建立连接且未使用代
有没有办法检测 XmlHttpRequest 无法解析 URL?使用错误的 URL 调用 Open(...) 时似乎不会抛出异常。 最佳答案 HTTP 状态代码将为零。 这适用于无法建立连接且未使用代
当我在 mozilla 浏览器中运行该应用程序时,出现以下错误 主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。更多帮助 http://xhr.spec.
我正在使用 javascript 通过 XMLHttpRequest 在 div 中加载数据,现在我想知道是否有可能在加载的 div 中创建另一个 XMLHttpRequest,这样一个新的 oncl
这个问题在这里已经有了答案: Are 'Arrow Functions' and 'Functions' equivalent / interchangeable? (4 个答案) 关闭 3 年前。
我感觉到很多关于使用新的 HTML5 JS XHR 技术的简单跨域 XmlHttpRequest 方法的讨论。给定下面的标准 JavaScript XHR 代码... var xhr=new XM
我是 PWA 的初学者,我尝试让我的代码调用 API,然后将其存储在浏览器的缓存中。但是我看到 axios 使用 XMLHttpRequest 而不是 fetch API,所以我无法缓存我的 API
这个问题在这里已经有了答案: Can we omit parentheses when creating an object using the "new" operator? (6 个答案) 关闭
这段代码块有什么区别: var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", uploadProgress,
我有一个 ajax 调用,我在其中使用 jQuery.ajax() 向 mvc 操作发出请求。这一切都很好。但是,由于某些表单具有文件控件,我将其从使用 jQuery.ajax() 更改为使用 XML
我对 Node.js 和 XMLHttpRequest 非常陌生,所以如果这是一个简单答案的问题,请耐心等待。 我目前正在尝试抓取一个 friend 的网页(当然要经过他的许可),其中包含视频和字幕。
我在 Microsoft Edge 中收到此错误。这是什么意思?在线搜索主要是为我提供有关人们在产品中遇到错误的线索。 最佳答案 如果 XMLHttpRequest 调用 ( www.mysite.s
我正在使用 jQuery 和 Office JS API 构建一个 Outlook 加载项。我在开发时有一个本地服务器正在运行,我正在尝试向我站点的主服务器上的端点提交一个 POST 请求。每次尝试提
当使用 FormData 对象将文件附加到请求时,我一直试图找到一种方法来在 XMLHttpRequest 对象上设置我自己的边界。我看过很多关于这个的帖子,每个人都说“不要设置边界,它会自动为你生成
我是一名优秀的程序员,十分优秀!