该 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')) %}输出包含 flash 消息以及数据。
{
"data": {},
"flash": {
"success": "Test successful"
}
}