相关疑难解决方法(0)

如何在浏览器中检测AJAX(XmlHttpRequest)调用的超时?

我在网上看,但文档很难得到.我们都知道使用浏览器内置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);吗?

谢谢!

-麦克风

javascript browser ajax

43
推荐指数
2
解决办法
8万
查看次数

使用后台页面的跨域XMLHttpRequest

在我的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

14
推荐指数
1
解决办法
4万
查看次数

如果不活动,Firefox会随机关闭XMLHttpRequest连接.为什么?

在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)

javascript firefox http xmlhttprequest

7
推荐指数
1
解决办法
563
查看次数

不推荐使用同步 XMLHttpRequest

今天,由于扩展程序的一些问题,我不得不重新启动浏览器。当我重新启动它时,我发现我的浏览器 (Chromium) 自动更新到一个不再允许同步 AJAX 请求的新版本。引用:

主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看http://xhr.spec.whatwg.org/

我的 node.js 应用程序需要同步 AJAX 请求才能工作,因为它们通过使用 fopen 的服务器从磁盘存储和加载数据。我发现这是一种非常简单有效的做事方式,在创建小型爱好项目和编辑器时非常方便......有没有办法在 Chrome/Chromium 中重新启用同步 XMLHttpRequests?

ajax xmlhttprequest synchronous deprecated chromium

5
推荐指数
1
解决办法
2661
查看次数

使用核心javascript时在ajax调用中设置超时

我有一个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 ajax

5
推荐指数
1
解决办法
705
查看次数