我在网上看,但文档很难得到.我们都知道使用浏览器内置XMLHttpRequest对象的基本AJAX调用(假设这里有一个现代浏览器):
var xmlHttp = new XMLHttpRequest(); // Assumes native object
xmlHttp.open("GET", "http://www.example.com", false);
xmlHttp.send("");
var statusCode = xmlHttp.status;
// Process it, and I'd love to know if the request timed out
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法通过检查浏览器中的XMLHttpRequest对象来检测AJAX调用是否超时?我会被建议做些什么window.setTimeout(function() { xmlHttp.abort() }, 30000);吗?
谢谢!
-麦克风
在我的Chrome扩展程序中,我想让我的options.html页面与Google的OpenId API进行通信.为了无缝地执行此操作,我iframe在选项页面上隐藏了一个弹出Google帐户登录页面(按照OpenId交互顺序等).
我的问题是我无法通过选项页面与iframe(iframe我控制的内容,但与我的chrome扩展名不同)进行通信window.postMessage.我想知道这个问题是否有快速的解决方法.
如果没有,我将options.html包含一个包含iframe页面布局和逻辑的内容.
javascript google-chrome xmlhttprequest cross-domain google-chrome-extension
在JavaScript类中,XMLHttpRequest连接到服务器.服务器正在缓慢地发送数据.这在Chromium中运行良好,但Firefox在随机时间后(约4s到~70s之间)关闭连接.
为什么Firefox会关闭连接?以及如何避免这种情况?
简化的JS代码:
var options = {};
options['header']=
{ 'Cache-Control':'no-cache, max-age=0',
'Content-type': 'application/octet-stream',
'Content-Disposition': 'inline'
};
// Get request information
this.http = new XMLHttpRequest();
this.http.onreadystatechange = _streamingResponse.bind(this);
this.http.open('post', url, true);
for (var i in options['header'])
{
this.http.setRequestHeader(i, options['header'][i]);
}
this.http.send('');
Run Code Online (Sandbox Code Playgroud)
对于PHP部分,类似于:
sleep(200); //wait long time, so firefox close the socket.
Run Code Online (Sandbox Code Playgroud)
如果服务器每隔几秒钟(<5s)发送一次内容,则连接会"永远"保持活动状态.但是如果没有发送数据,Firefox会关闭连接.
连接关闭: - readyState = 4 - status = 0
服务器似乎是正确的,因为在Chromium中它可以正常工作.
完整的测试代码:
的test.html
<html>
<header>
</header>
<body>
</body>
<script type="application/javascript">
function log( msg )
{
document.body.appendChild(document.createElement('div').appendChild(document.createTextNode(msg)));
document.body.appendChild(document.createElement('br'));
}
function request(url) …Run Code Online (Sandbox Code Playgroud) 今天,由于扩展程序的一些问题,我不得不重新启动浏览器。当我重新启动它时,我发现我的浏览器 (Chromium) 自动更新到一个不再允许同步 AJAX 请求的新版本。引用:
主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看http://xhr.spec.whatwg.org/。
我的 node.js 应用程序需要同步 AJAX 请求才能工作,因为它们通过使用 fopen 的服务器从磁盘存储和加载数据。我发现这是一种非常简单有效的做事方式,在创建小型爱好项目和编辑器时非常方便......有没有办法在 Chrome/Chromium 中重新启用同步 XMLHttpRequests?
我有一个JavaScript函数来调用ajax.现在我需要在这个函数中添加时间,就像调用服务花费的时间超过了ajax调用应该超时并显示默认消息.我不想在其中使用Jquery.
这是我的代码:
AJAX = function (url, callback, params) {
var dt = new Date();
url = (url.indexOf('?') == -1) ? url + '?_' + dt.getTime() : url + '&_' + dt.getTime();
if (url.indexOf('callback=') == -1) {
ajaxCallBack(url, function () {
if (this.readyState == 4 && this.status == 200) {
if (callback) {
if (params) {
callback(this.responseText, params);
} else {
callback(this.responseText);
}
}
}
});
} else {
var NewScript = d.createElement("script");
NewScript.type = "text/javascript";
NewScript.src = url + '&_' …Run Code Online (Sandbox Code Playgroud) javascript ×4
ajax ×3
browser ×1
chromium ×1
cross-domain ×1
deprecated ×1
firefox ×1
http ×1
synchronous ×1