PhoneGap / Android WebView引发“未知铬错误:0”

时间:2013-08-20 01:00:18

标签: javascript ajax cordova chromium

我目前正在使用PhoneGap开发一个项目,我需要向我的本地网络服务器发出ajax请求:

PHP代码

header('Access-Control-Allow-Origin: *');  

无论如何,当我在Android上使用jQuery执行ajax请求时,我收到此错误(在adb logcat中):

D/chromium(23078): Unknown chromium error: 0

Javascript代码是:

$.ajax({url:"http://192.168.1.219/works/privati/folder/api.php/getlastmaginfo",dataType:"json",success:function(data)
{
    console.log("Finished loading by ajax");
    console.log(data);
}});

在Ripple Emulator中按预期工作,在Android nope中。

有什么建议吗?谢谢你的帮助!

更新2013-08-21:

经过一些研究后,我得出的结论是$ .ajax不适用于PhoneGap(不知道为什么,也许是一个bug?)。 我们必须使用$ .get,但是当我使用$ .get执行请求时,我得到Unknown chromium error: -6 我还读到here该问题是由于Android的WebView URL机制的错误。

我将继续我的研究,直到找到一个好的和有效的解决方案

更新2013-08-21(2): 甚至没有使用这个作品...

var fileTransfer = new FileTransfer();

fileTransfer.download(
    "http://192.168.1.219/works/privati/qlipmag/api.php/getlastmaginfo",
    "json.json",
    function(entry) {
        console.log("OKAY");

    },
    function(error) {
        console.log(error);
    }
);

错误发生在new FileTransfer(); => Uncaught ReferenceError: FileTransfer is not defined

更新2013-08-22:

即使加载外部图像也不起作用:

<img src="http://externalhost.com/image.jpg"/>

同样的错误。

在android清单文件中,我已经设置了权限:

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

我真的不知道问题出在哪里......

更新2013-08-27: 我在PhoneGap for iPhone上尝试了相同的代码(在iPhone模拟器中),当我使用外部网站时,ajax请求是成功的。在android上使用外部网站也没有得到相同的结果。 同样的错误。

任何人都能明白为什么?访问来源设置得很好......

4 个答案:

答案 0 :(得分:5)

更新2013-08-27(1小时后)

问题已解决

实际上,PhoneGap不允许对IP地址进行ajax请求,它只允许将请求列入白名单(在config.xml中)。 我使用生产服务器(带有域)进行测试,并且工作正常。

无论如何,谢谢你们。我希望这可以帮助

答案 1 :(得分:2)

为了澄清这种情况,如果有人偶然发现它,$ .ajax确实可以与PhoneGap / Cordova一起使用 - 但是当你发现..域名必须列入白名单。

答案 2 :(得分:1)

从Cordova 4及更高版本开始,config.xml中只有<access origin="*" />并不起作用。您需要使用cordova-plugin-whitelist。

安装插件后,您可以使用config.xml中的以下代码来完成相同的操作:

<allow-navigation href="*" />
<allow-intent href="*" />

请注意,一般来说使用&#34; *&#34;是不好的做法。 als通配符。而是专门定义协议和地址。

有关如何使用cordova-plugin-whitelist的更多信息,请访问https://github.com/apache/cordova-plugin-whitelist

答案 3 :(得分:0)

尝试禁用缓存

$.ajax({
    cache: false,
    //your code
});

此错误消息实际上是空的。这主要意味着您的应用无法在文件系统上找到资源。因此,请尝试禁用缓存,因此它始终会从服务器加载资源。