AJAX JavaScript API

JavaScript API

JavaScript API比数据属性API更强大。 request方法可以与表单内部或表单元素上的任何元素一起使用。当该方法与表单内的元素一起使用时,它将被转发到表单。

request方法有一个必需的参数—AJAX处理程序名称。例:

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

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

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

您还可以通过将新函数作为选项传递来覆盖某些请求逻辑。这些逻辑处理程序可用。

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

使用示例

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

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

请求onCalculate方法后,用result CSS类将渲染的calcresult部分注入到页面元素:

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

请求onCalculate的时候传递额外的数据到后台:

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

在请求onCalculate方法更新页面元素之前执行一些js方法:

  1. $('form').request('onCalculate', {
  2. update: {calcresult: '.result'},
  3. beforeUpdate: function() { /* 在这里可以写一些js */ }
  4. })

如果onCalculate请求成功后,可以编写一些自定义的js方法,以及调用默认的success方法

  1. $('form').request('onCalculate', {success: function(data) {
  2. //...写在这...
  3. this.success(data);
  4. }})

执行没有表单元素的请求:

  1. $.request('onCalculate', {
  2. success: function() {
  3. console.log('Finished!');
  4. }
  5. })

运行onCalculate处理程序,如果成功,在默认的success函数完成后运行一些自定义代码:

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

全局AJAX事件

AJAX框架在更新的元素,触发元素,窗体和窗口对象上触发多个事件。 无论使用哪种API(数据属性API或JavaScript API),都会触发事件。

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

这些事件在触发元素上触发:

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

使用示例

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

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

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

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

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

  1. $(document).on('ajaxSetup', function(event, context) {
  2. // 在所有AJAX请求上启用对消息的AJAX处理
  3. context.options.flash = true
  4. // 在所有AJAX请求上启用StripeLoadIndicator
  5. context.options.loading = $.oc.stripeLoadIndicator
  6. // 通过触发类型错误的flashMsg处理错误消息
  7. context.options.handleErrorMessage = function(message) {
  8. $.oc.flashMsg({ text: message, class: 'error' })
  9. }
  10. // 通过触发消息类型的flashMsg来处理Flash消息
  11. context.options.handleFlashMessage = function(message, type) {
  12. $.oc.flashMsg({ text: message, class: type })
  13. }
  14. })