首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery AJAX请求在第一次请求后超时

jQuery AJAX请求在第一次请求后超时
EN

Stack Overflow用户
提问于 2012-03-22 04:13:29
回答 1查看 1.2K关注 0票数 0

我正在使用PhoneGap/jQuery编写一个从远程服务器获取JSON数据的应用程序。我创建了两个(大致)等效的"getJSON“函数,一个使用标准JavaScript,另一个使用jQuery:

代码语言:javascript
运行
复制
getJSON = function(url, callback) {
    var request = new XMLHttpRequest();
    request.open("GET", url, false);
    request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");

    request.onreadystatechange = function() {
        if (request.readyState != 4) {
            return;
        }

        if (request.status == 200) {
            callback(JSON.parse(request.responseText));
        } else {
            alert("Error: " + request.status);
        }
    }
    request.send(null);
};

标准函数(虽然可能不是很优雅)在我尝试过的所有情况下似乎都工作得很好。但是,jQuery版本:

代码语言:javascript
运行
复制
jqGetJSON = function(url, callback) {
    $.ajax(url, {
        cache: false,
        success: callback,
        error: function(jqxhr, message) {
            alert("AJAX error: " + message + ". Please retry.");
        }
    });
};

..。似乎只有效一次。我这样称呼这两个人:

代码语言:javascript
运行
复制
getJSON("http://example.com/blah/json", function(data) {
    alert(JSON.stringify(data));
}); // this works multiple times

jqGetJSON("http://example.com/blah/json", function(data) {
    alert(JSON.stringify(data);
}); // this succeeds

jqGetJSON("http://example.com/blah/json", function(data) {
    alert(JSON.stringify(data);
}); // this times out

第二个调用永远不会返回,每次发出另一个请求时,向jQuery选项添加“timeout”参数都会一致地调用错误函数。我也找不到任何类型的控制台输出。对其他URL的不同jQuery请求也会起作用(例如,单独的“搜索”和“获取信息”请求),但只有一次,重新启动应用程序可以解决这个问题。

我确信我在这里遗漏了一些显而易见的东西,也许更熟悉的人可以提供一些关于它是什么的见解?

提前感谢!

(我使用的是带有jQuery 1.7.1的PhoneGap 1.5,并在运行jQuery 2.3.7的设备上进行测试)

EN

回答 1

Stack Overflow用户

发布于 2012-04-04 01:43:44

我在使用jQuery 1.6.4的PhoneGap 1.5 (即Apache Cordov1.5)上也遇到了同样的问题。我听从了另一个用户的建议,回滚到PhoneGap 1.4.1,它为我解决了这个问题。在我的例子中,这是一个对getJSON (或.ajax,与我以何种方式执行请求无关)的特定调用-在那个失败的调用(总是会超时)之后,后续的每个调用都会失败。显然是某种PhoneGap问题。除了替换JAR文件和Javascript文件之外,当回滚到1.4.1时,不要忘记将插件名称更改回您的plugin.xml中的旧com.honegap.*名称,并将您的cordova.xml重命名为phonegap.xml (并更改cordova块名称)。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9812124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档