我正在使用Restler来实现一个简单的REST API。现在,如果我需要通过另一个域的AJAX使用该API,则需要发送一个回调参数以及我的请求。 ReSTLer是否对此提供支持(我尚未找到任何真实的文档)?
最佳答案
对于所有通过谷歌搜索访问该页面的人,我在github上提交了一个问题,并得到了作者的出色支持。事实证明,如果您熟悉ReSTLer的构建方式,则实现起来很简单。
从https://github.com/Luracast/Restler/issues/17
<?php
//jsonpformat.php
class JsonpFormat implements iFormat {
const MIME = 'text/javascript';
const EXTENSION = 'js';
/*
* JsonFormat is used internally
* @var JsonFormat;
*/
public $jsonFormat;
public static $functionName = 'parseResponse';
public function __construct() {
$this->jsonFormat = new JsonFormat ();
if (isset ( $_GET ['jsonp'] )) {
self::$functionName = $_GET ['jsonp'];
}
}
public function getMIMEMap() {
return array (self::EXTENSION => self::MIME );
}
public function getMIME() {
return self::MIME;
}
public function getExtension() {
return self::EXTENSION;
}
public function encode($data, $human_readable = FALSE) {
return self::$functionName . '(' . $this->jsonFormat->encode ( $data, $human_readable ) . ');';
}
public function decode($data) {
return $this->jsonFormat->decode ( $data );
}
public function setMIME($mime) {
//do nothing
}
public function setExtension($extension) {
//do nothing
}
}
?>
该文件应与reSTLer.php文件保存在同一目录中。有了该文件后,请编辑网关(index.php)以包含此文件,并将其添加为受支持的格式。例子:
<?php
require_once '../../restler/restler.php';
#set autoloader
#do not use spl_autoload_register with out parameter
#it will disable the autoloading of formats
spl_autoload_register('spl_autoload');
$r = new Restler();
$r->setSupportedFormats('JsonpFormat','JsonFormat', 'XmlFormat');
$r->addAPIClass('BMI');
$r->handle();
?>