【问题标题】:AJAX call not working in Cordova 3.5, but will work when viewed in a browserAJAX 调用在 Cordova 3.5 中不起作用,但在浏览器中查看时会起作用
【发布时间】:2014-08-25 13:32:56
【问题描述】:

我在使用 Cordova 时遇到了一个相当令人沮丧的问题,并且 AJAX 请求在我的桌面/移动浏览器上查看时可以工作,但它根本不会从使用 Cordova 的应用程序内部触发。

我的 AJAX 调用包含在我从 HTML 页面链接到的 JS 文件中,即:

var DSUser = '4';

var urlLink = 'http://localhost/cwwa/web/app.php/ajax/' + DSUser + '/options/';

$.ajax({
    type: 'GET',
    url: urlLink,
    dataType: 'jsonp',
    crossDomain: true,
    contentType: 'application/json',
    success: function(data) {
        alert('AJAX Works');
        var divsel = $('#divisionSelect');
        divsel.empty();

        var DivisionList = (data.divisions);

        divsel.append('<option value ="0">All Sites</option>');

        $.each(DivisionList, function(i, item){
            divsel.append('<option value ="' + DivisionList[i].division + '">' + DivisionList[i].division + '</option>');
        });

    }
});

这应该做的是在 HTML 下拉菜单中添加很多选项。然而,这不会发生。我在 Success 中添加了一个 alert("works") ,它不会触发。所以 AJAX 调用出错了。

我将此代码添加到 AJAX 调用中:

error: function(req, err){
    console.log(err);
}

在 Android Studio 中返回有用的错误(interact.js 是 AJAX 调用所在的位置):

I/chromium: [INFO:CONSOLE(53)] "error", 来源: file:///android_asset/www/js/interact.js (53)

我已将 URL 放入浏览器,它会返回我应该期待的 JSON 数组。在此应用将使用的网站上使用相同的 AJAX 调用,因此在大多数情况下,AJAX 调用本身不是问题。

我在互联网上了解到您需要授予 Android 访问互联网的权限。我也将它包含在我的 AndroidManifest.xml 文件中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <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" />

仍然完全不喜欢它。

【问题讨论】:

  • 您是否尝试使用本地计算机和通过 USB 连接到本地计算机的设备进行测试?你的声明urlLink = 'http://localhost/... 让我假设这一点。如果是这样,则设备上看不到localhost。我与另一位编码员进行了类似的对话(请参阅[此处])(stackoverflow.com/questions/24840771/…),如果它解决了您的问题,您可以查看。
  • 将 localhost 更改为 ip 地址

标签: javascript android jquery ajax cordova


【解决方案1】:

我同意@frank 上面的评论,最明显的罪魁祸首是您的第二行,主机名可能无法在应用程序中解析。

var urlLink = 'http://localhost/cwwa/web/app.php/ajax/' + DSUser + '/options/';

更正后,您需要启用跨域资源共享。

  1. 在 Cordova config.xml 中,添加以下行 &lt;access origin="*" /&gt;。参考:Cordova 3.5.0 Whitelist Guide
  2. 在您的服务器上,执行以下操作:I want to add CORS support to my server

发回你的结果。

【讨论】:

  • 我最后一次尝试弄清楚发生了什么,我将 URL 更改为指向一个在场外的开发服务器。然后它立即起作用。我不认为模拟器可以使用localhost可以吗?
  • 不,模拟器内的 localhost 仍会指向它正在模拟的手机,它看不到您的 PC。您可以使用 PC 的 LAN IP 地址。
【解决方案2】:

A) 将 App/config.xml 复制并粘贴到 'App/platforms/browser' 和 'App/platforms/browser/www'

B) 删除所有平台甚至浏览器,然后使用 build.phonegap.com 创建 APK

'cordova platform remove browser --save'

它的工作原理

【讨论】:

    猜你喜欢
    • 2013-10-27
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多