0

我对使用 phonegap、codeigniter 和 jQuery Mobile(我的第一个项目)非常陌生,目前在客户端和服务器端使用 jQuery Mobile 创建了一个应用程序,我使用 Codeigniter 框架创建了一个 RESTful API。现在,当我在本地开发时,浏览器中的应用程序(尚未使用 phonegap)与 API 通信很好,没有出现问题。

我昨天将 Codeigniter API 放在服务器上,现在遇到了 2 个问题:

  • 使用 jQuery Mobile 构建的应用程序不断收到以下错误:

    Access-Control-Allow-Origin 不允许 Origin localhost。

现在我做了一些阅读,大多数人说使用 jsonp 而不是 json 并且在服务器端使用以下内容:

$CI->output->set_header("Access-Control-Allow-Origin: *");
$CI->output->set_header("Access-Control-Expose-Headers: Access-Control-Allow-Origin");
$CI->output->set_status_header(200);
$CI->output->set_content_type('application/json');

现在我的问题是我不完全确定哪个是用来解决问题的,天气这两者都需要实施等等。如果需要修复它们,它是如何完成的?是否有一个有据可查的地方可以教我如何处理这个问题,最好我想在哪里阅读以便我可以学习?

  • 第二个问题是当我将 jQuery Mobile 应用程序放入 phonegap 并为 Android 构建它时。该应用程序无法从服务器获取数据。现在是因为上面的跨域错误,还是这个问题不同?我也在本节中进行了一些阅读,并在我的 Android config.xml 中添加了以下代码:

但是我仍然无法从服务器中提取任何内容。就像我说的那样,我是一个新手,但非常感谢在这件事上提供一些帮助。另外我知道我没有发布代码,但根据评论我将发布社区需要哪些代码来帮助解决这个问题,只需指定哪些代码。提前感谢您的帮助!

4

3 回答 3

1

关于这个Access-Control-Allow-Origin问题,我遇到了同样的错误,并通过将这一行<?php header('Access-Control-Allow-Origin: *'); ?>放在index.php项目根目录中来解决。

于 2013-07-09T12:53:53.337 回答
0

这个问题还没有得到 100% 的回答,但现在感谢@Niloy Saha 的帮助,使用 Codeigniter RESTful 框架修复 Access-Control-Allow-Origin 错误只需转到 Controller 文件夹中的控制器并正确在顶部粘贴;

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

然后,这应该允许您从浏览器与服务器进行通信并能够获得响应。经过几个小时的尝试,我设法解决了我的问题。在 Android 项目的 res/xml 文件夹中有一个名为 config.xml 的文件。在该文件中确保有以下代码:

<access origin="http://10.0.2.2*" subdomains="true"/> 

并确保您具有以下内容:

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

在您的 AndroidManifest.xml 中。对我来说,这似乎让一切正常

于 2013-07-09T14:51:03.323 回答
0

我做了和你类似的事情,Zend FW with API on server and jQuery Mobile App。

我使用过 JSONP,没有使用任何 Access-Control-Allow-Origin 标头。

我的控制器中有一个方法:

function returnData($data) {

    header('Content-type: text/javascript');
    echo $_GET['callback']. '('. json_encode($data). ')';
    die();

}

在 API 调用结束时,我用它来返回数据。

在 jQuery 中获取数据:

$.ajax({
  dataType: "jsonp",
  url: url,
  data: {someparam: 'value'},
  success: function(data) { /* ur data is here */ }
});
于 2013-07-09T18:20:53.543 回答