该 ajaxHandler() 函数在 Twig 内部运行一个 AJAX 处理程序,并准备一个 Cms\Classes\AjaxResponse 响应对象。 一个调用 onResetPassword 处理程序的示例。
{% set result = ajaxHandler('onResetPassword') %}以下属性可以在结果对象中预期。
| Property | Data |
|---|---|
| data | data set or returned by the handler, also available by directly calling the object. |
| error | an error was thrown during the handler execution. |
| flash | flash messages set by the handler. |
| redirect | the handler returned a redirect. |
分配给页面的变量对结果对象可用。请看以下 AJAX 处理程序定义。
function onResetPassword()
{
$this['someVariable'] = 'someValue';
}接下来是一个,一个调用onResetPassword处理程序的示例。
{% set result = ajaxHandler('onResetPassword') %}从处理程序返回或在处理程序调用期间在页面上设置的数据变量将通过结果变量提供。
{{ result.someVariable }}当 在您的主题中构建 API 时,响应可以直接传递给 response() Twig 函数。
{% do response(ajaxHandler('onResetPassword')) %}当作为响应返回时,数据将以 JSON 格式在 data 属性中提供。
{
"data": {}
}出于安全原因,页面变量未随响应一同返回。调用 withPageVars 方法以将其随响应一同返回。
{% do response(ajaxHandler('onResetPassword').withPageVars()) %}withVars 方法可用于随响应包含额外数据。
{% do response(ajaxHandler('onResetPassword').withVars({ 'token': 'foobar' })) %}如果在处理程序执行期间发生异常,错误消息将可在 error.message 属性中获取。如果错误是 ValidationException 则无效字段可在 error.fields 属性中找到。
{% if result.error %}
An error occurred: {{ result.error.message }}
{% endif %}如果发生异常,错误信息将作为 error 属性提供。
{
"error": {
"message": "An error occurred"
}
}当从 AJAX 处理器返回响应时,以下状态码用于异常类型。
| Exception | Status Code |
|---|---|
ValidationException | 422 Unprocessable Entity |
ApplicationException | 400 Bad Request |
Exception | 500 Internal Server Error |
如果 AJAX 处理器导致了重定向,这将通过 redirect 属性提供并可以直接返回。例如
function onRedirect()
{
return Redirect::to('https://octobercms.com');
}以下内容将作为响应重定向到浏览器。
{% do response(ajaxHandler('onTest')) %}对象包含重定向消息以及数据。
{
"data": {},
"redirect": "https://octobercms.com"
}如果使用了闪存消息,这些将可在 **flash** 属性中获取。以下面的处理程序为例。
function onTest()
{
Flash::success('Test successful');
}调用处理程序并作为响应发送。
{% do response(ajaxHandler('onTest')) %}输出中包含即时消息以及数据。
{
"data": {},
"flash": {
"success": "Test successful"
}
}