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

时间:2010-10-17 18:15:48

标签: php jquery json jsonp

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

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

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

THX

2 个答案:

答案 0 :(得分:2)

getJSON受限于您的浏览器锁定非原始域的安全限制。为了执行跨域,您必须使用JSONP,它要求您将数据包装在由回调变量定义的函数中(例如$ _GET ['jsonp_callback'])。 e.g。

<强>的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值匹配(或者默认为“回调”)。

答案 1 :(得分:0)

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

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

?(<JSON here>)

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