From 1beea5d594b89986b5f92ec2fd33bbeb722a21f9 Mon Sep 17 00:00:00 2001 From: Jesse O'Brien Date: Thu, 6 Dec 2012 11:16:06 -0500 Subject: [PATCH 1/4] Add JSONP as a default response. --- laravel/response.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/laravel/response.php b/laravel/response.php index ccd53e1f..51ee33d6 100644 --- a/laravel/response.php +++ b/laravel/response.php @@ -98,6 +98,26 @@ public static function json($data, $status = 200, $headers = array()) return new static(json_encode($data), $status, $headers); } + /** + * Create a new JSONP response. + * + * + * // Create a response instance with JSONP + * return Response::jsonp($data, 200, array('header' => 'value')); + * + * + * @param mixed $data + * @param int $status + * @param array $headers + * @return Response + */ + public static function jsonp($data, $status = 200, $headers = array()) + { + $headers['Content-Type'] = 'application/javascript; charset=utf-8'; + + return new static(json_encode($data), $status, $headers); + } + /** * Create a new response of JSON'd Eloquent models. * @@ -344,4 +364,4 @@ public function __toString() return $this->render(); } -} \ No newline at end of file +} From cf6e2a768b7bb93e884873429f5f50489a507002 Mon Sep 17 00:00:00 2001 From: Jesse O'Brien Date: Thu, 6 Dec 2012 11:22:48 -0500 Subject: [PATCH 2/4] Add documentation for JSONP Response --- laravel/documentation/views/home.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/laravel/documentation/views/home.md b/laravel/documentation/views/home.md index 27383562..53a0c4f3 100644 --- a/laravel/documentation/views/home.md +++ b/laravel/documentation/views/home.md @@ -62,6 +62,10 @@ #### Returning a JSON response: return Response::json(array('name' => 'Batman')); +#### Returning a JSONP response: + + return Response::jsonp(array('name' => 'Batman')); + #### Returning Eloquent models as JSON: return Response::eloquent(User::find(1)); From 404b59730a229c246e036a53cd35fdbee20a3a20 Mon Sep 17 00:00:00 2001 From: Jesse O'Brien Date: Thu, 6 Dec 2012 11:57:26 -0500 Subject: [PATCH 3/4] Added callback wrapper for JSONP auto wrapping. --- laravel/documentation/views/home.md | 2 +- laravel/response.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/laravel/documentation/views/home.md b/laravel/documentation/views/home.md index 53a0c4f3..3daf57a9 100644 --- a/laravel/documentation/views/home.md +++ b/laravel/documentation/views/home.md @@ -64,7 +64,7 @@ #### Returning a JSON response: #### Returning a JSONP response: - return Response::jsonp(array('name' => 'Batman')); + return Response::jsonp('myCallback', array('name' => 'Batman')); #### Returning Eloquent models as JSON: diff --git a/laravel/response.php b/laravel/response.php index 51ee33d6..5e69308f 100644 --- a/laravel/response.php +++ b/laravel/response.php @@ -103,7 +103,7 @@ public static function json($data, $status = 200, $headers = array()) * * * // Create a response instance with JSONP - * return Response::jsonp($data, 200, array('header' => 'value')); + * return Response::jsonp('myFunctionCall', $data, 200, array('header' => 'value')); * * * @param mixed $data @@ -111,11 +111,11 @@ public static function json($data, $status = 200, $headers = array()) * @param array $headers * @return Response */ - public static function jsonp($data, $status = 200, $headers = array()) + public static function jsonp($callback, $data, $status = 200, $headers = array()) { $headers['Content-Type'] = 'application/javascript; charset=utf-8'; - return new static(json_encode($data), $status, $headers); + return new static($callback.'('.json_encode($data).')', $status, $headers); } /** From 4f5cc0cd97676e5064b176cee7b0432df31ba975 Mon Sep 17 00:00:00 2001 From: Jesse O'Brien Date: Thu, 6 Dec 2012 12:04:06 -0500 Subject: [PATCH 4/4] Add semi-colon onto padding to be safe. --- laravel/response.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/response.php b/laravel/response.php index 5e69308f..7979ef46 100644 --- a/laravel/response.php +++ b/laravel/response.php @@ -115,7 +115,7 @@ public static function jsonp($callback, $data, $status = 200, $headers = array() { $headers['Content-Type'] = 'application/javascript; charset=utf-8'; - return new static($callback.'('.json_encode($data).')', $status, $headers); + return new static($callback.'('.json_encode($data).');', $status, $headers); } /**