15

我目前正在使用 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 中没有。

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

2013 年 8 月 21 日更新:

经过一些研究,我得出的结论是 $.ajax 不能与 PhoneGap 一起使用(不知道为什么,也许是一个错误?)。我们必须改用 $.get ,但是当我使用 $.get 发出请求时,Unknown chromium error: -6 我还读到这里的问题是由于 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: 我在 iPhone 的 PhoneGap 上尝试了相同的代码(在 iPhone 模拟器中),当我使用外部网站时,ajax 请求成功。在 android 上使用外部网站也不会得到相同的结果。同样的错误。

任何人都可以看到为什么?访问源设置得很好...

4

4 回答 4

5

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

问题已解决

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

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

于 2013-12-27T19:48:07.193 回答
2

为了澄清这一点,以防有人像我一样偶然发现它,$.ajax 确实可以与 PhoneGap/Cordova 一起使用 - 但正如您发现的那样.. 域必须被列入白名单。

于 2013-12-23T14:43:52.243 回答
1

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

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

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

请注意,通常使用“*”als 通配符不是一个好习惯。而是专门定义协议和地址。

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

于 2015-11-27T09:08:41.973 回答
0

尝试禁用缓存

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

这个错误信息真的很空洞。这主要意味着您的应用无法在文件系统上找到资源。因此,请尝试禁用缓存,以便它始终从服务器加载资源。

于 2013-08-20T07:27:02.667 回答