PhoneGap与PhoneGap开发者应用程序和cli交叉域ajax

时间:2014-06-04 16:48:46

标签: ajax cordova proxy phonegap-build

当使用PhoneGap开发者应用程序和CLI进行ajax跨域调用时,只有GET调用和POST 且没有数据成功,使用数据的POST调用无法正常工作。如果尝试本地,一切都很好。

我确实在config.xml access origin="*"中设置了。 还在脚本中设置了$.support.cors = true;

以下是我在PhoneGap上的Hello world应用程序中所做的示例。

    <script type="text/javascript">
    $(document).bind("ready", function() {
        $.support.cors = true;
        test();
    });
    </script>

    <script>
    function test(){
        $.ajax({
            url:'http://www.url.com',
            type:'POST',
            headers:{
                "Content-Type":'application/x-www-form-urlencoded'
            },
            data:'x=1',
            cache:false,
            success: function (data) {
                alert(data);
            },
            error:function(request, textStatus, errorThrown){
                alert(errorThrown);
            }
        });
        return false;
    }
    </script>

有趣的是,当看到控制台时,在通话后,呼叫在制作时不显示,但过了一会儿。响应时间过长,响应需要15秒以上,最后得到响应时,ajax没有错误。但是在控制台中,我收到错误Proxy error: url: "entered url" ECONNRESET

我尝试通过REST控制台执行相同的请求,但效果相同。

代理的网址是

http://localhost:3000/proxy/

我没有对代理进行任何更改,如果可能,我想禁用它,但如果没有,只需启用跨域。

我正在进行跨域调用的网站启用了跨域调用,我在Ripple中进行了应用测试,一切正常。此外,如果我使用PhoneGap构建构建应用程序,一切都在使用smarthphone(iOS / iPhone)。

注意,如果我使用Ripple测试应用程序,只有远程代理工作和禁用代理,本地不起作用。这可能表示本地问题,但我是代理和PhoneGap的新手。

2 个答案:

答案 0 :(得分:2)

我找到了解决方法,它不是使用phonegap-cli或node.js,但我可以使用phonegap开发人员应用程序来测试哪个是主要的,所以我不必每次都重建应用程序。

如果您已在计算机上安装了Apache,则可以告诉phonegap开发者应用程序监听标准端口(80)而不是phonegap-cli :3000,它将成功加载应用程序。通常在使用Apache(xampp或wampp)时,您使用的是localhost,或者您可能创建了无效的vhost,您必须找到本地网络IP,通常为192.168.1.X,其中X是你的电脑号码。这与开始serve时的IP phonegap-cli显示相同。

你可以通过CMD-&gt; ipconfig和那里的IPv4地址在Windows上找到它。通过在浏览器URL栏中输入http://IP/来测试它,它应该引导您到本地主机的根文件夹,如果您已经安装了Apache,则与http://localhost/相同。就我而言,我正在使用XAMPP(wampp),所以它是xampp文件夹中的htdocs。

现在,您应该将您的应用项目也放在该文件夹中,以便您可以轻松访问它。如果您的项目在那里,您应该可以通过转到http://IP/project-folder/来访问它。所以你输入phonegap开发者应用程序的路径,它应该工作!

注意,如果您使用的是phonegap项目结构,则可能需要将www添加到我之前提到的路径末尾,因此它看起来像http://IP/project-folder/www/。我没有使用phonegap标准文件夹结构,它对我有用。

另外,我没有使用太多本机功能,所以我不知道它是否100%正常工作。我的主要目标是让跨域调用工作,并且能够在不重建应用程序的情况下对其进行测试以进行任何更改。

额外的,像3/4手指点击的快捷方式将无法正常工作,因为在这种情况下您没有使用node.js,因此没有反馈给计算机上的phonegap开发者应用程序。

建议,添加某处按钮以在进行更改时重新加载应用,这样您每次更改时都不必退出应用。

答案 1 :(得分:1)

我知道这个帖子已经很老了(可能有很多重复。如果有的话,抱歉)。

我通过在本地Apache设置上启用CORS解决了这个问题。有很多不同的方法可以做到这一点。我这样做的方法是将以下内容添加到我的虚拟主机配置中。

Header set Access-Control-Allow-Origin "*"

您应该也可以使用.htaccess启用此功能。确保mod_headers也已启用。它通常在httpd.conf中默认注释掉。同样,有多种方法可以设置Apache环境,因此这可能不适合您。

此外;我确实在jQuery中启用了cors并将crossDomain添加到a​​jax方法数据中。不知道是不是真的需要。