diff --git a/cake/libs/view/helpers/jquery_engine.php b/cake/libs/view/helpers/jquery_engine.php index f4dfdb4e1..6fe39799b 100644 --- a/cake/libs/view/helpers/jquery_engine.php +++ b/cake/libs/view/helpers/jquery_engine.php @@ -27,6 +27,18 @@ App::import('Helper', 'Js'); class JqueryEngineHelper extends JsBaseEngineHelper { +/** + * Option mappings for jQuery + * + * @var array + **/ + var $_optionMap = array( + 'request' => array( + 'type' => 'dataType', + 'complete' => 'success', + 'request' => 'beforeSend', + ) + ); /** * Create javascript selector for a CSS rule * @@ -124,10 +136,11 @@ class JqueryEngineHelper extends JsBaseEngineHelper { $url = $this->url($url); $options = $this->_mapOptions('request', $options); if (isset($options['data']) && is_array($options['data'])) { - //handle data array to query string. + $options['data'] = $this->_toQuerystring($options['data']); } $options['url'] = $url; - $options = $this->_parseOptions($options); + $callbacks = array('success', 'error', 'beforeSend', 'complete'); + $options = $this->_parseOptions($options, $callbacks); return '$.ajax({' . $options .'});'; } } diff --git a/cake/libs/view/helpers/js.php b/cake/libs/view/helpers/js.php index 8400c56d8..c880e09cd 100644 --- a/cake/libs/view/helpers/js.php +++ b/cake/libs/view/helpers/js.php @@ -591,7 +591,7 @@ class JsBaseEngineHelper extends AppHelper { $out = array(); foreach ($options as $key => $value) { if (!is_int($value) && !in_array($key, $safeKeys)) { - $value = '"' . $this->escape($value) . '"'; + $value = $this->value($value); } $out[] = $key . ':' . $value; } @@ -618,6 +618,25 @@ class JsBaseEngineHelper extends AppHelper { } return $options; } +/** + * Convert an array of data into a query string + * + * @param array $parameters Array of parameters to convert to a query string + * @return string Querystring fragment + * @access protected + **/ + function _toQuerystring($parameters) { + $out = ''; + $keys = array_keys($parameters); + $count = count($parameters); + for ($i = 0; $i < $count; $i++) { + $out .= $keys[$i] . '=' . $parameters[$keys[$i]]; + if ($i < $count - 1) { + $out .= '&'; + } + } + return $out; + } } diff --git a/cake/tests/cases/libs/view/helpers/jquery_engine.test.php b/cake/tests/cases/libs/view/helpers/jquery_engine.test.php index c7e600468..73cdee459 100644 --- a/cake/tests/cases/libs/view/helpers/jquery_engine.test.php +++ b/cake/tests/cases/libs/view/helpers/jquery_engine.test.php @@ -147,7 +147,7 @@ class JqueryEngineHelperTestCase extends CakeTestCase { 'type' => 'json', 'data' => array('name' => 'jim', 'height' => '185cm') )); - $expected = '$.ajax({url:"/people/edit/1", method:"post", success:doSuccess, error:handleError, dataType:"json", data:"name=jim&height=185cm"});'; + $expected = '$.ajax({method:"post", error:handleError, data:"name=jim&height=185cm", dataType:"json", success:doSuccess, url:"/people/edit/1"});'; $this->assertEqual($result, $expected); } }