PhoneGap Build:AJAX无法正常工作

时间:2016-07-07 16:56:54

标签: javascript ajax cordova phonegap-build

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

我已经阅读了所有内容,试图找到解决问题的方法。似乎有很多人也有这个问题,但到目前为止我还没能解决它。我看到人们说的最常见的事情是它是白名单问题。但我的config.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 documentation,应该允许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);
}

当我按下按钮时,它会显示文字&#34;发送信息......&#34;但永远不要把它换成&#34;回复......&#34;或者&#34;它工作了!&#34;或&#34; foo&#34;。这意味着永远不会调用ajaxer()。

我无法理解为什么它不起作用。就像我之前提到的那样当我使用phoneGap开发者应用程序时它很有用。在我测试时,我的手机wifi已关闭。所以我知道手机与服务器位于不同的网络,因为手机必须使用移动网络。如果这只是一个白名单问题,那么当我使用开发者应用进行测试时,是否会出现同样的问题?

另外,我知道我的服务器没有问题,因为我在开发者应用程序上测试时以及当我手动导航时响应很好。

希望有人可以帮助我。

ADDITION

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

这对我来说有点混乱,因为在AppName / www以及AppName / platforms / browser下有一个index.html,在AppName / platforms / browser / www下面为什么所有文件都是三倍?我试着让所有三个副本都是一样的。似乎没有任何区别。

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

2 个答案:

答案 0 :(得分:1)

您是否尝试过在内容安全策略中添加connect-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

上的文档

答案 1 :(得分:1)

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

你也可以通过weinre远程调试器来调试phonegap应用程序并查看ajax请求如何进入并返回服务器和服务器 您可以按照以下教程中的步骤进行操作 Weinre Remote Debugging Tutorial

我希望我的回答很有用