PhoneGap Build:AJAX不起作用

PhoneGap Build: AJAX not working

本文关键字:不起作用 AJAX Build PhoneGap      更新时间:2023-09-26

我一直在尝试制作一个进行AJAX调用的小测试应用程序。当我使用PhoneGap桌面服务器和Android开发人员应用程序运行它时,一切正常。但是当我使用PhoneGap Build编译应用程序时,请在手机上安装.apk。AJAX 调用失败。

我已经阅读了所有内容,试图找到解决问题的方法。 似乎有很多人也有这个问题,但到目前为止我还没有能够解决它。我看到人们说的最常见的事情是这是一个白名单问题。但是我的配置.xml文件包含...

<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.2.1"/>

以及...

<access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>

我的CSP看起来像这样...

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

根据Cordova文档,它应该允许AJAX。

我的应用程序非常简单。它有一个按钮,可以调用我的 AJAX 函数并传递给它一些信息以发送到服务器,还有一个回调函数......

<button onclick="serv('init',ajaxer)">BUTTON</button>

这是我的js文件:

function ajaxer(resp){
    var e = document.getElementById("test");
    e.innerHTML="responded...";
    if(resp.go){
        e.innerHTML="IT WORKED!";
    }else{
        e.innerHTML="foo";
    }
}
function serv(request,returnFunc,parameters) { //SEND AND RECEIVE ALL SERVER INFO
    document.getElementById("test").innerHTML="sending info...";    
    var query="";
    var serverObject;
    if(window.XMLHttpRequest){
        serverObject = new XMLHttpRequest();
    }else{
        serverObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    serverObject.goto = returnFunc;
    serverObject.onreadystatechange = function() {
        if(serverObject.readyState==4&&serverObject.status==200){
            var serverResponse = JSON.parse(serverObject.responseText);
            serverObject.goto(serverResponse);
        }
    };
    if(parameters){
        query="&"+parameters;
    }
    serverObject.open("POST", "http://tylermackenzie.duckdns.org/phoneGap%20Test/server.php", true);
    serverObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    serverObject.send('qType='+request+query);
}

当我按下按钮时,它会显示文本"正在发送信息..."但从不将其切换为"已响应..."或"它奏效了!"或"foo"。这意味着 ajaxer() 从未被调用过。

我不明白为什么它不起作用。就像我之前提到的。当我使用PhoneGap开发人员应用程序时,它效果很好。我在测试时关闭了手机 wifi。所以我知道手机与服务器在不同的网络上,因为手机必须使用移动网络。如果这只是一个白名单问题,那么当我使用开发人员应用程序对其进行测试时,它不应该有同样的问题吗?

另外,我知道这不是我的服务器的问题,因为当我在开发人员应用程序上进行测试以及手动导航到那里时,它的响应良好。

希望有人能帮助我。

加法

它是否与我上传到PhoneGap Build的文件结构有关?我刚刚使用了PhoneGap桌面应用程序创建的"hello world"基本应用程序。并编辑了 html 和 js 以创建一个小测试应用程序。

这对我来说有点令人困惑,因为有一个索引.html在 AppName/www 以及 AppName/platforms/browser 和 AppName/platforms/browser/www 下 为什么所有文件都增加了三倍?我试着让所有三个副本都是同一件事。似乎没有任何区别。

我在某处读到我只需要将AppName/www文件夹上传到PhoneGap Build,它似乎与上传其他所有内容一样好。

我建议你使用jQuery来发出ajax请求,它更易于管理和维护,也更容易通过jQuery发出ajax请求

您还可以调试PhoneGap应用程序,并使用Weinre远程调试器查看AJAX请求如何进入服务器和从服务器返回您可以按照以下教程中提供的步骤进行操作远程调试教程

我希望我的回答会有用

您是否尝试过在内容安全策略中添加连接 src 部分? 例如:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src *">

这控制了可以向何处发出 Ajax 请求,请参阅 content-security-policy.com 中的文档