【问题标题】:JSONP, CodeIgniter, and BookmarkletsJSONP、CodeIgniter 和书签
【发布时间】:2010-12-13 05:26:52
【问题描述】:
我正在使用 CodeIgniter 和 JavaScript/jQuery 构建一个书签应用程序。现在我的 CI 应用程序只是返回一个 JSON 编码的数组到书签脚本,但显然 jQuery 将无法使用它,因为它不是 JSONP/跨域策略问题。
如何让我的 CodeIgniter 函数返回 JSONP 结果?我对 JSONP 的理解不是很透彻,所以请原谅我的无知。
【问题讨论】:
标签:
javascript
jquery
codeigniter
jsonp
bookmarklet
【解决方案1】:
据我所知,JSONP 只是从 URL 加载脚本,而不是制作 XHR。 URL 将返回 javasript,而不是返回 json/xml/plain-text。返回的 javascript 将只是对传递 JSON 数据的全局函数的调用。 jQuery 在 JSONP 请求之前方便地创建了这个全局函数,并将它的标识符作为“回调”发送到 JSONP 请求中。
简单地说,你必须访问 $_GET['callback'](必须使用 $.get 进行跨域)它保存了回调函数的名称。例如:
<?php echo $_GET['callback']."(".json_encode($arrayJSONData).")"; ?>
这将返回调用全局 javascript 函数并将 json 数据传递给它的 javascript。
请记住,这不是 XHR/Ajax,而是动态附加一个新的 DOM 脚本元素,您不能 POST 数据,因此没有 $_POST。当您在 HTML 中创建脚本元素时,您将如何发送 POST 数据?只能传递的是GET数据:<script src='someurl.php?this=getdatastuff'></script>。
我认为这就是一切。 xb