october cms-官方文档-ajax(续)

本文详细介绍了October CMS的AJAX API,包括数据属性API和JavaScript API的用法,以及AJAX全局事件、额外功能如加载指示器、表单验证等。讲解了如何在发送请求前进行确认、处理表单验证错误、显示Flash信息等实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AJAX API

Data attributes API

Data attributes API

属性描述
data-request指定AJAX要调用的方法
data-request-confirm指定确认消息。在发送请求之前显示确认。如果用户单击“取消”按钮,则不会发送请求。
data-request-redirect指定在成功AJAX请求之后重定向浏览器的URL。
data-request-url指定将请求发送到的URL。默认值:window.location.href
data-request-update指定要更新的partial和页面元素(CSS选择器)的列表。格式为partial: selector, partial: selector. 在某些情况下需要使用引号,如:‘my-partial’: ‘#myelement’. 注意@和^的用法
data-request-ajax-global默认为false。设置为true可全局启用jQuery ajax事件:ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess和ajaxSend。
data-request-data指定要发送到服务器的其他POST参数。格式如下 var: value, var: value.如果用引号的话 格式为 var: ‘some string’ 该属性可以在触发元素上使用,例如在也具有data-request属性的按钮上,在触发元素的最接近元素或父表单元素上使用。该框架合并了data-request-data属性的值 如果不同元素上的属性使用相同的名称定义参数,则框架将使用以下优先级:触发元素data-request-data,较近的父元素data-request-data,表单输入数据。
data-request-before-update指定要在页面内容更新之前直接执行的JavaScript代码。在JavaScript代码中,您可以访问以下变量:this(触发请求的元素),context对象,从服务器接收的data,textStatus 文本,jqXHR对象
data-request-successthis , context object , data object , textStatus , jqXHR object.
data-request-errorthis , context object , textStatus , jqXHR object.
data-request-complete指定在请求成功完成或遇到错误时要执行的JavaScript代码。可访问变量为:this(触发请求的元素),context对象,textStatus 文本,jqXHR对象
data-request-loading为请求运行时要显示的元素指定CSS选择器。您可以使用此选项显示AJAX加载指示器。该功能使用jQuery的show()和hide()函数来管理元素的可见性。
data-request-form显式指定一个表单元素以用于获取表单数据。如果未指定,则使用最接近触发元素的表单,包括元素本身是一个表单。
data-request-flash指定后,此选项将指示服务器清除并发送带有响应的所有Flash消息。本选项也用在extra features中
data-request-files指定请求文件时,请求将接受文件上传,这需要浏览器提供FormData接口支持。
data-track-input可以应用于还具有data-request属性的文本,数字或密码输入字段。定义后,当用户在字段中输入内容时,输入字段会自动发送AJAX请求。 可选属性值可以定义框架在发送请求之前会等待多久间隔(以毫秒为单位)

当为元素指定data-request属性时,当用户与其交互时,该元素会触发AJAX请求。根据元素的类型,以下事件将触发请求:

元素事件
Forms表单发送时
Links, buttons点击时
Text, number, and password fields当文本更改时,并且仅当出现了data-track-input属性时
Dropdowns, checkboxes, radios元素被选择时

用法

提交表单时调用onCalculate方法。用名为‘calcresult’的partial更新标识符为“ result”`的元素:

<form data-request="onCalculate" data-request-update="calcresult: '#result'">

发送请求之前,单击“删除”按钮,请求确认:

<form ... >
    ...
    <button data-request="onDelete" data-request-confirm="Are you sure?">Delete</button>

成功请求后,重定向到另一个页面:

<form data-request="onLogin" data-request-redirect="/admin">

成功请求后显示一个弹出窗口:

<form data-request="onLogin" data-request-success="alert('Yay!')">

发送带参POST:

在多个元素之间发送带参post:

<div data-request-data="id: 7">
    <button data-request="onDelete">Delete</button>
    <button data-request="onSave">Update</button>
</div>

文件上传

<form data-request="onSubmit" data-request-files>
    <input type="file" name="photo" accept="image/*" />
    <button type="submit">Submit</button>
</form>

JavaScript API

JavaScript API

JavaScript API比数据属性API更强大。 request方法可以与表单内部或表单元素上的任何元素一起使用。当该方法与表单内的元素一起使用时,它将被转发到表单。
request方法具有一个必填参数-AJAX处理程序名称。例:

<form onsubmit="$(this).request('onProcess'); return false;">
    ...

request方法的第二个参数是options对象。您可以使用与jQuery AJAX函数兼容的任何选项和方法。以下选项特定于十月框架:

属性描述
update一个对象,指定要更新的partial列表和页面元素(作为CSS选择器):{‘partial’:’#select’}。如果前面是@select,那就是插入partial 而不是覆写
confirm确认字符串。如果设置,则确认在发送请求之前显示。如果用户单击“取消”按钮,则请求将取消。
data一个可选对象,用于指定要与表单数据一起发送到服务器的数据:{var:‘value’}。
redirect字符串,指定成功请求后将浏览器重定向到的URL。
beforeUpdate在页面元素更新之前执行的回调函数。 函数获取3个参数:从服务器接收的数据对象,文本状态字符串和jqXHR对象。函数内部的this变量解析为请求内容一个包含两个属性的object-----handler 和 options代表最初的request()参数。
success一旦成功,执行回调,指定AJAX要调用的方法。如果提供此选项,它将覆盖默认框架的功能:不更新元素,不触发beforeUpdate事件,不触发ajaxUpdate和ajaxUpdateComplete事件。事件处理程序获取3个参数:从服务器接收的数据对象,文本状态字符串和jqXHR对象。但是,您仍然可以调用默认框架功能,在函数内部调用this.success(…)
error发生错误时执行回调函数。默认情况下,显示警报消息。如果覆盖此选项,则不会显示警报消息。处理程序获取3个参数:jqXHR对象,文本状态字符串和错误对象-请参见jQuery AJAX函数。
complete一个表单元素,用于获取与请求一起发送的表单数据,可以作为选择器字符串或表单元素传递
flash如果为true,则指示服务器清除并发送带有响应的所有Flash消息。默认值:false
form一个表单元素,用于获取与请求一起发送的表单数据,可以作为选择器字符串或表单元素传递。
files如果为true,则请求将接受文件上传,这需要浏览器提供FormData接口支持。默认值:false
loading运行请求时要显示的可选字符串或对象。该字符串应为元素的CSS选择器,该对象应支持show()和hide()函数来管理可见性。您可以在使用框架额外功能时传递全局对象$ .oc.stripeLoadIndicator。

您还可以通过传递新fuction作为option来覆盖某些request逻辑。以下这些是可用的

方法描述
handleConfirmMessage(message)请求用户确认时调用。
handleErrorMessage(message)显示错误消息时调用。
handleValidationMessage(message, fields)使用验证时,将焦点放在第一个无效字段上。
handleFlashMessage(message, type)使用Flash选项提供Flash消息时调用(见上文)。
handleRedirectResponse(url)浏览器将重定向到另一个位置时调用。

用法

在发送onDelete请求之前,请请求确认:

$('form').request('onDelete', {
    confirm: 'Are you sure?',
    redirect: '/dashboard'
})

运行onCalculate处理程序,并将呈现的calcresult partial与result CSS类一起注入到page元素中:

$('form').request('onCalculate', {
    update: {calcresult: '.result'}
})

带参运行onCalculate

$('form').request('onCalculate', {data: {value: 55}})

刷新页面前调用beforeUpdate

$('form').request('onCalculate', {
    update: {calcresult: '.result'},
    beforeUpdate: function() { /* do something */ }
})

调用成功后 这么写

$('form').request('onCalculate', {success: function(data) {
    //... do something ...
    this.success(data);
}})

没有表单元素时 js写法:

$.request('onCalculate', {
    success: function() {
        console.log('Finished!');
    }
})

成功function完成后 调用一个回调

$('form').request('onCalculate', {success: function(data) {
    this.success(data).done(function() {
        //... do something after parent success() is finished ...
    });
}})

全局 AJAX 事件

AJAX框架在update,trigger,form和windows对象上装载了多个钩子。
无论使用哪个API(数据属性API或JavaScript API),都会触发钩子。

方法描述
ajaxBeforeSend在发送请求之前在window对象上触发。
ajaxBeforeUpdate在请求完成之后但在页面更新之前,直接在表单对象上触发。处理程序获取5个参数:event对象, context object, the data object 服务器传回的data对象, 状态文本值, 和jqXHR对象
ajaxUpdate在使用框架更新后在页面元素上触发。处理程序获取5个参数:event对象, context object, the data object 服务器传回的data对象, 状态文本值, 和jqXHR对象
ajaxUpdateComplete框架更新所有元素后,在window对象上触发。处理程序获取5个参数:event对象, context object, the data object 服务器传回的data对象, 状态文本值, 和jqXHR对象
ajaxSuccess成功完成请求后,在表单对象上触发。处理程序获取5个参数:event对象, context object, the data object 服务器传回的data对象, 状态文本值, 和jqXHR对象
ajaxError如果请求遇到错误,则在表单对象上触发。 处理程序获取5个参数:event对象, context object, error信息, 状态文本值, 和jqXHR对象
ajaxErrorMessage如果请求遇到错误,则在窗口对象上触发。处理程序获取2个参数:事件对象和从服务器返回的错误消息
ajaxConfirmMessage当给出确认选项时,在窗口对象上触发。处理程序获得2个参数:事件对象和作为confirm选项的一部分分配给方法的文本消息。这对于实现自定义确认逻辑/接口而不是本机javascript确认框很有用。

以下事件在触发元素上触发:

方法描述
ajaxSetup在形成请求之前触发,从而允许通过context.options对象修改option。
ajaxPromise在AJAX请求发送之前直接触发。
ajaxFail如果AJAX请求失败,则最终触发。
ajaxDone如果AJAX请求成功,则最终触发。
ajaxAlways无论AJAX请求失败还是成功都触发。

例子

在元素上触发ajaxUpdate事件时执行JavaScript代码。

$('.calcresult').on('ajaxUpdate', function() {
    console.log('Updated!');
})

使用逻辑处理程序执行显示Flash消息的单个请求。

$.request('onDoSomething', {
    flash: 1,
    handleFlashMessage: function(message, type) {
        $.oc.flashMsg({ text: message, class: type })
    }
})

将配置全局应用于所有AJAX请求。

$(document).on('ajaxSetup', function(event, context) {
    // Enable AJAX handling of Flash messages on all AJAX requests
    context.options.flash = true

    // Enable the StripeLoadIndicator on all AJAX requests
    context.options.loading = $.oc.stripeLoadIndicator

    // Handle Error Messages by triggering a flashMsg of type error
    context.options.handleErrorMessage = function(message) {
        $.oc.flashMsg({ text: message, class: 'error' })
    }

    // Handle Flash Messages by triggering a flashMsg of the message type
    context.options.handleFlashMessage = function(message, type) {
        $.oc.flashMsg({ text: message, class: type })
    }
})

extras 额外后缀功能

使用AJAX框架时,可以选择指定Extras后缀,其中包括其他StyleSheet和JavaScript文件。当在前端CMS页面中使用AJAX请求时,这些功能很有用。

{% framework extras %}

Loading indicator 加载指示器

你应该注意到的第一个功能是运行AJAX请求时显示在页面顶部的加载指示器。该指标与AJAX框架使用的全局事件挂钩。
当AJAX请求启动时,将触发ajaxPromise事件,该事件显示加载指示器并将鼠标光标变为加载状态。
ajaxFail和ajaxDone事件用于检测请求何时完成,指示符在哪里再次隐藏。

表单验证

您可以在表单上指定data-request-validate属性以启用验证功能。

<form
    data-request="onSubmit"
    data-request-validate>
    <!-- ... -->
</form>
抛出验证错误

服务器端AJAX处理程序中,您可以使用ValidationException类抛出验证异常,以使字段无效,其中第一个参数是数组。
数组应使用字段名称作为键,并使用错误消息作为值。

function onSubmit()
{
    throw new ValidationException(['name' => 'You must give a name!']);
}

注意:您还可以将验证服务(validation service)的实例作为异常的第一个参数传递。

展示error信息

在表单内部,可以使用容器元素上的data-validate-error属性显示第一条错误消息。容器内的内容将被设置为错误消息,并且该元素将变为可见。

<div data-validate-error></div>

要显示多个错误消息,请包含一个具有data-message属性的元素。
在此示例中,段落标签将被复制并为存在的每条消息设置内容。

<div class="alert alert-danger" data-validate-error>
    <p data-message></p>
</div>

要在AJAX失效上添加自定义类,请钩住ajaxInvalidField和ajaxPromise JS事件

$(window).on('ajaxInvalidField', function(event, fieldElement, fieldName, errorMsg, isFirst) {
    $(fieldElement).closest('.form-group').addClass('has-error');
});

$(document).on('ajaxPromise', '[data-request]', function() {
    $(this).closest('form').find('.form-group.has-error').removeClass('has-error');
});
字段展示error

另外,您可以通过定义使用data-validate-for属性的元素(将字段名称作为值传递)来显示各个字段的验证消息。

<!-- Input field -->
<input name="phone" />

<!-- Validation message for the field -->
<div data-validate-for="phone"></div>

如果该元素保留为空,则将使用服务器中的验证文本填充该元素。否则,您可以指定您喜欢的任何文本,它将改为显示。

<div data-validate-for="phone">
    Oops.. phone number is invalid!
</div>

加载button

当任何元素包含data-attach-loading属性时,将在AJAX请求期间将CSS类oc-loading添加到该元素。此类使用:after在按钮和锚点元素上生成小加载图标。

<form data-request="onSubmit">
    <button data-attach-loading>
        Submit
    </button>
</form>

<a
    href="#"
    data-request="onDoSomething"
    data-attach-loading>
    Do something
</a>

flash信息

在表单上指定data-request-flash属性,以在成功的AJAX请求中启用Flash消息。

<form
    data-request="onSuccess"
    data-request-flash>
    <!-- ... -->
</form>

结合事件处理程序中Flash外观的使用,请求完成后将显示一条Flash消息。

function onSuccess()
{
    Flash::success('You did it!');
}

为了与基于AJAX的Flash消息保持一致,可以通过在页面或布局中放置此代码来在页面加载时呈现标准flash信息 standard flash message。

{% flash %}
    <p
        data-control="flash-message"
        class="flash-message fade {{ type }}"
        data-interval="5">
        {{ message }}
    </p>
{% endflash %}

用法

以下是表单验证的完整示例。它调用onDoSomething事件处理程序,该事件处理程序将触发加载提交按钮,对表单字段执行验证,然后显示成功的Flash消息。

<form
    data-request="onDoSomething"
    data-request-validate
    data-request-flash>

    <div>
        <input name="name" />
        <span data-validate-for="name"></span>
    </div>

    <div>
        <input name="email" />
        <span data-validate-for="email"></span>
    </div>

    <button data-attach-loading>
        Submit
    </button>

    <div class="alert alert-danger" data-validate-error>
        <p data-message></p>
    </div>

</form>

AJAX事件处理程序查看客户端发送的POST数据,并将一些规则应用于验证器。如果验证失败,则抛出ValidationException,否则返回Flash :: success消息。

function onDoSomething()
{
    $data = post();

    $rules = [
        'name' => 'required',
        'email' => 'required|email',
    ];

    $validation = Validator::make($data, $rules);

    if ($validation->fails()) {
        throw new ValidationException($validation);
    }

    Flash::success('Jobs done!');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值