24

最近两天我一直在研究这个问题,并查看了很多其他建议。是的,我可以让这个简单的 ajax 请求在 phonegap 应用程序中工作,无论是在 android 模拟器上还是在实际的 android 手机上。

我的 phonegap 版本是(使用 phonegap -v)3.0.0-0.14.3

我正在使用的代码是:

var url = 'http://www.thomas-bayer.com/sqlrest/CUSTOMER';
    return $.ajax({
        type: "GET",
        url: url,
        timeout: 60 * 1000
    }).done(function (data) {
        alert('hey');
    }).fail(function (a, b, c) {
        console.log(b + '|' + c);
    });

我在日志中得到的结果只是:

错误| 在文件:///android_asset/www/js/index.js:62

我将设置添加到 AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

我在 Config.xml 中有以下内容

<param name="android-package" value="org.apache.cordova.core.NetworkManager" />

当我检查时,navigator.connection.type3G上了模拟器和wifi物理电话。

知道还有什么问题吗?

更新: 如果我在失败函数的第一个参数中记录 JSON,我会得到:

{"readyState":4,"status":404,"statusText":"error"}
4

3 回答 3

49

您应该将该域列入白名单,以使您的 AJAX 调用正常工作。

将此行添加到配置文件-:

<access origin="*" />

除非另有说明,否则 Phonegap 的默认策略会阻止所有网络访问。上述行将禁用此安全限制。您还可以更具体地允许某些域绕过此安全功能,方法是在配置文件中包含域名,如下所示

<access origin="http://yourdomain" />
于 2013-08-16T04:32:14.773 回答
16

除了白名单,确保 cors 标志为真以启用跨源资源共享。

$.support.cors=true;

请在此处找到参考

于 2013-12-22T05:47:07.370 回答
0

我在使用 Visual Studio 时有一个 localhost url。我通过编辑VS项目Applicationhost.config文件并制作绑定协议的版本来解决它:端口:而不是*:端口:localhost,然后通过IP地址访问。确保获取对端口的所有引用。

于 2016-04-15T22:31:25.003 回答