使用durandal的Phonegap android应用程序:ajax调用未打开的页面

时间:2013-11-01 09:00:05

标签: android jquery ajax cordova durandal

我对android很新,我遇到了一个问题,即使用Phonegap开发的本机app中没有加载带有ajax调用的页面。

跨域AJAX POST - 请求在包含移动电话上的浏览器的Web浏览器上运行良好,但不适用于使用Phonegap构建的本机应用程序。

我在durandal创建了一个应用,可以从Facebook获取数据并在页面中显示。它在浏览器中工作正常但具有ajax调用的页面未加载到使用Phonegap构建的本机应用程序中。注意:其他静态页面工作正常。

我的Ajax脚本:

define(function(require){
  return {
    getCustomers:function(){
      //do some ajax and return a promise
        return $.ajax({
          url: 'http://graph.facebook.com/facebook?callback=?',
          dataType: 'json',
        }).promise();
    }
  };
});

域名白名单 - config.xml

<access origin="*"/>
<!-- <content src="http://mysite.com/myapp.html" /> for external pages -->
<content src="index.html" />

用户权限

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

我收到了一个错误。我不知道这与此有关吗?

TypeError: Result of expression 'parentElement' [null] is not an object. at file:///android_asset/www/js/index.js:41

3 个答案:

答案 0 :(得分:1)

必须在服务器端启用CORS参数,并传递“mobile.allowCrossDomainPages = true;”在phonegap。

在stackoverflow中搜索CORS相关的队列,有很多解决方案。

让我解释为什么它适用于移动浏览器,但不适用于手机包装。 Phonegap打包从应用程序的本地文件系统中提取文件,使引用域为“Local”。当您向URL发出请求时,它显然位于不同的域中,因此是CORS。在phonegap配置中启用CORS参数主要解决了这个问题。如果属于,则必须检查webservice / URL是否支持CORS。寻找服务器端CORS参数启用。

答案 1 :(得分:0)

您确定为您的项目明确设置了电话空白吗?

请查看此页面:http://www.adobe.com/devnet/html5/articles/getting-started-with-phonegap-in-eclipse-for-android.html并逐步检查。

答案 2 :(得分:0)

它应该工作。无论如何,尝试将其添加到头部代码

$(document).bind("mobileinit", function () {
    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
});

并尝试删除此处的,

    return $.ajax({
      url: 'http://graph.facebook.com/facebook?callback=?',
      dataType: 'json' //<<---HERE
    }).promise();

json还是jsonp