CodeIgniter 中的 JSONP

Posted

技术标签:

【中文标题】CodeIgniter 中的 JSONP【英文标题】:JSONP in CodeIgniter 【发布时间】:2010-10-19 17:36:27 【问题描述】:

我在 CodeIgniter 中使用 jQuery JSONP 方法 $.getJSON 时遇到问题。从中获取 JSON 的 URL 如下:

http://spinly.000space.com/index.php/admin/isloggedin  

问题是我有一个运行$.getJSON 方法的demo.html 文件,并从我上面指出的URL 中获取数据。

demo.html

<html>
<head>
  <script src="http://www.spinly.000space.com/public/js/jquery.js"></script>

  <script>
  $(document).ready(function()
  var myurl = "http://spinly.000space.com/index.php/admin/isloggedin/&jsoncallback=?";

    //myurl = "http://com.lnk.bz/jsonp.php?sleep=3&jsoncallback=?";
    $.getJSON(myurl,function(adat) 
        alert(adat);
     //   clearTimeout(t);
    ); 

  );
  </script>
</head>
<body>
  <div id="images">
  </div>
</body>
</html>

当我运行demo.html 时,什么也没有发生。如您所见,当我将 URL 更改为另一个不使用 CodeIgniter 作为框架的 URL 时,它应该提醒返回的数据。我让警报功能运行,但在这种情况下,使用 CodeIgniter 备份的 URL 时,它不起作用。有没有人可以解决我的问题?如果您能给我一些反馈,我将不胜感激。提前致谢!

【问题讨论】:

寻找在CI中实现jsonp的好方法... 在详细说明之前,您能否指定您使用的 CI 版本,是“Core”还是“Reactor”? 这个网址已经失效了。 【参考方案1】:

你的网址中的&符号错误:

loggedin/&jsoncallback=?

应该是这样的

loggedin/?jsoncallback=?

运行我得到的响应

jsonp123( ...

这意味着它会尝试调用 jsonp123 函数,此时您的代码中的 adat 部分从未使用过。

【讨论】:

后现代:我已经更改了代码,现在 spinly.000space.com/index.php/admin/isloggedin 显示 "title":"user online","user":"online":"yes" 仍然如此不起作用。 getJson 方法创建了一个新函数,该函数被替换为您的 url,发送时类似于:loggedin/?jsoncallback=jsonp1239837994134&_=1239838173986 尝试将您的 php 替换为:$cb = $_GET[ 'jsoncallback'];回声$cb;回声'("test":true)';这有点令人困惑。【参考方案2】:

默认情况下,CI 不允许查询字符串,那么您是否在 config.php 中启用了 enable_query_strings

$config['enable_query_strings'] = TRUE;

【讨论】:

【参考方案3】:

我认为您面临的问题是由于浏览器对不允许跨域请求的限制。我猜您将应用托管在其他域/子域上,这就是导致此问题的原因。

您需要使用的是 JSONP,即带有填充的 Json。详情在这里:http://en.wikipedia.org/wiki/JSONP

在这里查看 jquerys ajax api 中的 jsonp:http://api.jquery.com/jQuery.ajax/ 看看是否能解决您的问题。

【讨论】:

【参考方案4】:

还要确保在 config.php 中将 $config['allow_get_array'] 设置为 TRUE。这将允许您使用

$this-&gt;input-&gt;get();

在您的控制器中。

【讨论】:

以上是关于CodeIgniter 中的 JSONP的主要内容,如果未能解决你的问题,请参考以下文章

活动记录 CodeIgniter 2 中的这个查询有啥问题?

codeigniter 中的友好 url,带有 url 中的变量

php中codeigniter中的应用程序路径

CodeIgniter 中的 CKEditor

Codeigniter,事务中的错误跟踪

CodeIgniter + Doctrine:控制器中的 CRUD?