YUI 3 IO Multi-response PHP implementation

Back to the example

The following PHP class can be used to send the correct responses:

define('MR_MIN_INITIAL_RESPONSE_LENGTH', 1024);

class multi_response
{
	private $first_response = true;
	private $callback_fn;

	function __construct()
	{
		$this->callback_fn = $_REQUEST['callback'];
	}

	function send(
		/* string/object */	$data)
	{
		if ($this->first_response)
		{
			echo '<html><head></head><body>';
		}

		if (is_object($data))
		{
			$data = json_encode($data);
		}

		echo '<script type="text/javascript">';
		echo $this->callback_fn,'(',$data,')';
		echo '</script>';

		$len = strlen($data);
		if ($this->first_response && $len < MR_MIN_INITIAL_RESPONSE_LENGTH)
		{
			echo '<!-- ';
			for ($i=$len+1; $i<=MR_MIN_INITIAL_RESPONSE_LENGTH; $i++)
			{
				echo 'x';
			}
			echo ' -->';
		}
		$this->first_response = false;

		flush();
	}

	function finish()
	{
		echo '</body></html>';
	}
}

Example usage:

$response = new multi_response();
$response->send(compute_first_result());
$response->send(compute_second_result());
$response->send(compute_third_result());
$response->finish();