【问题标题】:How to make application loading independent of web service call?如何使应用程序加载独立于 Web 服务调用?
【发布时间】:2012-08-23 09:23:29
【问题描述】:

我创建了一个 phonegap 应用程序,它在初始化时调用 Web 服务(加载 index.html)。我正在拨打电话

 $.ajax({
  type: "GET",
  url: "http://webserviceurl.com/service",
  cache: false,
  async: true, 
  success: onSuccess,
  error: onError,
  timeout: 40000
});

现在,如果 web 服务不可用,服务调用会等待 40 秒(我将限制设置为超时)并将控制权转移到 onError 消息,这反过来会显示一条简单的错误警报消息。

但我的问题是,应用程序显示一个空白屏幕并且在服务调用完成(40 秒)之前不显示 html 页面。我希望 web 服务调用在后端执行并且不影响实际应用程序的加载(我认为 async:true 会有所帮助,但事实并非如此)。

有什么想法可以让我的应用独立于网络服务调用吗?

编辑 这有效

function appReady(){
      // do the ajax here
}

document.addEventListener("deviceready", appReady, false);

【问题讨论】:

  • 如果这是在 onLoad() 事件中,页面将首先被加载、显示,然后才会进行 AJAX 调用 - 您确定页面本身有任何内容吗?这绝对不应该阻止 index.html 显示,因为这是一个本地文件,而这是一个外部调用 - 它们是分开的,不会相互阻塞
  • 另外,您确定这不是因为跨站点请求吗?也许你忘了设置 $.support.cors = true;现在它正在为你生成一个 JS 错误?

标签: javascript android jquery ajax cordova


【解决方案1】:

你可以这样吗

$(document).ready(function() {

$.ajax({
  type: "GET",
  url: "http://webserviceurl.com/service",
  cache: false,
  async: true, 
  success: onSuccess,
  error: onError,
  timeout: 40000
});

});

现在您的 ajax 查询将在文档准备好(完全加载)后进行

【讨论】:

  • 感谢您的想法。您建议的解决方案变体对我有用(编辑了问题)
【解决方案2】:

在拨打电话之前只需设置您的页面。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多