如何在 php 中创建类似 twitter 的 search.json

Posted

技术标签:

【中文标题】如何在 php 中创建类似 twitter 的 search.json【英文标题】:How to create in php a search.json twitter-like 【发布时间】:2011-04-26 15:44:14 【问题描述】:

我在我的网站上创建了一个 search.php 文件,它生成一个 JSON 字符串,帮助我在我的应用程序中使用实时 ajax。

但是现在,我想将它作为 API 开放给其他人,但我发现 $.get $.getJSON $.ajax 不允许从其他服务器/域使用我的 search.php 文件。

如何将我的 php 搜索转换为 search.json,就像 Twitter 一样,将参数传递给它。

谢谢

【问题讨论】:

【参考方案1】:

getJSON 受到浏览器安全限制的限制,这些限制会锁定非源域。为了进行跨域,您必须使用 JSONP,这需要您将数据包装在由回调变量定义的函数中(例如 $_GET['jsonp_callback'])。例如

Search.php

<?php
    echo $_GET['jsonp_callback'] . '(' . json_encode($data). ');'
    // prints: jsonp123("search" : "value", etc. );
?>

jQuery

$.ajax(
  dataType: 'jsonp',
  data: 'search=value',
  jsonp: 'jsonp_callback',
  url: 'http://yourserver.com/search.php',
  success: function () 
    // do stuff
  ,
);

只需确保您在 php 脚本中定义的回调变量与您通过 .ajax 查询调用的 jsonp 值匹配(或默认为“回调”)。

【讨论】:

谢谢。在上面的代码中使用 jsonpCallback 效果很好。 您好,我在函数中重用这段代码时遇到了困难,这里:***.com/questions/5263259/… 还有其他好的解决方案吗?【参考方案2】:

Twitter 使用两种机制来允许跨域访问 search.twitter.com 域:crossdomain.xml(用于 Flash)和 JSONP(用于 javascript)。

对于JSONP,调用JavaScript 包含一个回调=? URL中的参数,在哪里?是回调函数的名称。 服务器端脚本将编码后的 JSON 包装为:

?(<JSON here>)

这允许将查询参数编码为脚本标记的 src URL,从而允许 XMLHttpRequest 不允许的跨域访问。当数据到达时,它作为脚本执行。 JavaScript 解释器对 JSON 进行解码,因为它是 JavaScript 的有效子集,然后以解码的 JSON 作为参数调用回调函数。在您的 PHP 脚本中实现 JSONP 只需要几行代码。

【讨论】:

以上是关于如何在 php 中创建类似 twitter 的 search.json的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 和 javascript 中创建小部件?

如何在节点 js 中创建类似 php 的函数

如何在 PHP 中创建网页的图像?

如何在 PHP 中创建下拉查找字段?

如何在 PHP 中创建可视化存档?

在 PHP 7 中创建类似枚举的行为的推荐方法是啥? [复制]