issue 2596 add a js callback method.

git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11774 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
devjin 2012-10-18 07:55:57 +00:00
parent 3c79a21e67
commit fcee2600f1
3 changed files with 29 additions and 3 deletions

View file

@ -794,7 +794,7 @@ class Context {
function setResponseMethod($method='HTML') {
is_a($this,'Context')?$self=&$this:$self=&Context::getInstance();
$methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1);
$methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1, 'JS_CALLBACK' => 1);
$self->response_method = isset($methods[$method]) ? $method : 'HTML';
}
@ -809,7 +809,7 @@ class Context {
if($self->response_method) return $self->response_method;
$method = $self->getRequestMethod();
$methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1);
$methods = array('HTML'=>1, 'XMLRPC'=>1, 'JSON'=>1, 'JS_CALLBACK' => 1);
return isset($methods[$method]) ? $method : 'HTML';
}
@ -823,9 +823,12 @@ class Context {
function setRequestMethod($type='') {
is_a($this,'Context')?$self=&$this:$self=&Context::getInstance();
$xe_js_callback = isset($_GET['xe_js_callback']) ? $_GET['xe_js_callback'] : $_POST['xe_js_callback'];
($type && $self->request_method=$type) or
(strpos($_SERVER['CONTENT_TYPE'],'json') && $self->request_method='JSON') or
($GLOBALS['HTTP_RAW_POST_DATA'] && $self->request_method='XMLRPC') or
($xe_js_callback && $self->request_method='JS_CALLBACK') or
($self->request_method = $_SERVER['REQUEST_METHOD']);
}

View file

@ -43,6 +43,11 @@
require_once("./classes/display/JSONDisplayHandler.php");
$handler = new JSONDisplayHandler();
}
else if(Context::getRequestMethod() == 'JS_CALLBACK')
{
require_once("./classes/display/JSCallbackDisplayHandler.php");
$handler = new JSCallbackDisplayHandler();
}
else {
require_once("./classes/display/HTMLDisplayHandler.php");
$handler = new HTMLDisplayHandler();
@ -65,7 +70,7 @@
if($httpStatusCode && $httpStatusCode != 200) $this->_printHttpStatusCode($httpStatusCode);
else
{
if(Context::getResponseMethod() == 'JSON') $this->_printJSONHeader();
if(Context::getResponseMethod() == 'JSON' || Context::getResponseMethod() == 'JS_CALLBACK') $this->_printJSONHeader();
else if(Context::getResponseMethod() != 'HTML') $this->_printXMLHeader();
else $this->_printHTMLHeader();
}

View file

@ -0,0 +1,18 @@
<?php
class JSCallbackDisplayHandler{
/**
* Produce JSCallback compliant content given a module object.\n
* @param ModuleObject $oModule the module object
* @return string
**/
function toDoc(&$oModule)
{
$variables = $oModule->getVariables();
$variables['error'] = $oModule->getError();
$variables['message'] = $oModule->getMessage();
$json = str_replace(array("\r\n","\n","\t"),array('\n','\n','\t'),json_encode2($variables));
$output = sprintf('<script>%s(%s);</script>', Context::get('xe_js_callback'), $json);
return $output;
}
}