【问题标题】:Offline phonegap build web app stay on page when php file can't be reached from server当无法从服务器访问 php 文件时,离线 phonegap 构建 Web 应用程序留在页面上
【发布时间】:2013-10-18 07:59:51
【问题描述】:

我正在创建一个离线 phonegap 构建 webapp。 我找到了一种在连接到 Internet 时连接到服务器上的 php 文件的方法。

基本代码头

<form id="ff" action="http://localhost/coupons/addcoupon.php" method="post">

基本代码体

$('#ff').form({ 
success:function(data){ 
    $.messager.alert('Info', data, 'info'); 
} }); 

但是由于 webapp 处于离线状态。我正在寻找一种解决方案,以便在无法访问 php 文件时留在页面上,并警告“无法连接到服务器!”。

提前致谢!

【问题讨论】:

标签: javascript php web-applications cordova phonegap-build


【解决方案1】:

这可能有效,但您应该查看文档:

document.addEventListener("offline", onOffline, false);

function onOffline() {
    // Handle the offline event
}

http://docs.phonegap.com/en/3.0.0/cordova_events_events.md.html#offline

【讨论】:

  • 它不起作用。我想这是因为我正在使用phonegap build,而不是cordova。
【解决方案2】:

假设您包含 jquery,您可以阻止提交表单,检查 url 是否可访问,并且仅当它提交表单时才会显示错误消息。 比如下面的代码,

var connectionExists = false;
    $('#ff').submit(function (e) {
        if (!connectionExists) {
            e.preventDefault();
            var url = $(this).attr('action');
            var $form = $(this);

            $.ajax({
                type: "GET",
                url: url,
                success: function () {
                    connectionExists = true;
                    $form.submit();
                },
                error: function () {
                    alert("Can't connect to the server!");
                }
            });
        }


    });

http://jsfiddle.net/pJuFr/1/

【讨论】:

  • 感谢您的回复。当我将操作更改为与 index.html 位于同一目录中的文件时,它会起作用。但是当我将操作更改为localhost/coupons/addcoupon.php时它不起作用。
  • 您是从电脑浏览器还是手机浏览器尝试此操作?您的手机无法访问您电脑的本地主机。如果你在电脑上尝试,请确保你有 localhost 或者只是从应用程序的根上下文中尝试绝对,即 /coupons/addcoupon.php 。
  • 我正在尝试使用我的电脑。当我在 Firefox 中进入开发人员模式时,我可以看到提交确实给出了响应。事实上,即使我收到警报:“无法连接到服务器”,我的 php 文件也会在我的数据库中添加很多行。因此,我将 var url 和 url 更改为仅带有回声的 localhost 测试 php 文件。但是我认为我需要设置一个超时或类似的东西。但我不知道怎么做。
  • 代码实际上检查表单的 url 是否可访问。当您检查时,您不想运行您在此页面上运行的任何内容。例如,为了实现这一点,您可能需要在查询中添加一个特殊的参数,这样您就不会做任何事情只是响应(而不是向数据库添加很多行)。更好的方法是使用一个页面来检查您的服务器是否已启动并运行,就像您对 test.php 文件所做的那样。您不能发出跨源请求,因此您必须调用与您的 php 页面位于同一地址的资源进行检查。
  • 如果您的页面在 localhost/myapp/addcoupon.php 下运行,那么您的 url 必须具有相同的来源,即 "localhost/myapp/checkconnection.php" 。这仅代表您在手机上作为混合应用程序运行时的浏览器,您可以通过指定主机来消除此限制。
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
相关资源
最近更新 更多