来自Phonegap Android的AJAX请求失败

24

我已经在过去两天里一直在做这件事情,并查看了很多其他的建议。是的,我可以从一个 phonegap 应用程序中发出这个简单的 ajax 请求,在 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);
    });

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

error| at file:///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.type 时,模拟器上会得到 3G,而在实体手机上会得到 wifi
有什么其他问题吗? 更新: 如果我记录失败函数的第一个参数中的JSON,则会得到:
{"readyState":4,"status":404,"statusText":"error"}

在原生浏览器或普通的 WebView 中,同一个页面加载是否正确? - FoamyGuy
@FoamyGuy 我也有同样的想法。添加了jQuery来设置页面上<a>标签的相同URL。点击它会在手机上打开浏览器,然后成功加载页面。 - Ron Harlev
@FoamyGuy Javascript运行良好。我没有使用WebView。只是ajax失败了。 - Ron Harlev
顺便说一句,我也尝试了使用纯XMLHttpRequest请求,但同样失败了。 - Ron Harlev
1
你是否记得将该域名加入白名单? - Drew B.
显示剩余3条评论
3个回答

49

如果你想要使用AJAX调用,应该whitelist该域名。

将以下这行代码添加到配置文件中:

<access origin="*" />

Phonegap的默认策略会屏蔽所有网络访问,除非另有规定。上述行将禁用此安全限制。您还可以更具体地设置只允许某些域名绕过此安全特性,方法是在配置文件中包含该域名。
<access origin="http://yourdomain" />

12
非常高兴在早上4点看到这个。 - Dom Ramirez

16

除白名单外,还需确保CORS标志设置为true以启用跨源资源共享。

$.support.cors=true;

请在这里查找相关参考资料。


3
Akiva我爱你。干得好。仅仅设置白名单不起作用,必须在页面加载时将其设置为true! - dewd

0

我在使用Visual Studio时有一个本地主机URL。 我通过编辑VS项目的Applicationhost.config文件来解决问题,并创建了绑定协议的版本,使其为:port:而不是*:port:localhost*,然后通过IP地址访问。 确保获取所有端口的引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接