JavaScript API
Introduction
JavaScript API 比数据属性 API 更强大。这request
方法可以用于表单内部或表单元素上的任何元素。当该方法与表单内的元素一起使用时,它会被转发到表单。
这request
方法有一个必需的参数——AJAX 处理程序名称。例子:
<form onsubmit="$(this).request('onProcess'); return false;">
...
的第二个参数request
方法是选项对象。您可以使用与jQuery AJAX 函数.以下选项特定于 Winter 框架:
Option | Description |
---|---|
update |
一个对象,指定要更新的列表部分和页面元素(作为 CSS 选择器):{'partial': '#select'}。如果选择器字符串前面有@ 符号,从服务器接收到的内容将附加到元素,而不是替换现有内容。 |
confirm |
确认字符串。如果设置,则在发送请求之前显示确认信息。如果用户单击“取消”按钮,请求将取消。 |
data |
一个可选的对象,指定要与表单数据一起发送到服务器的数据:{var: 'value'}。什么时候files 是的,您还可以通过使用在此对象中包含要上传的文件Blob 对象.指定任何文件的文件名Blob 对象,只需设置filename 上的财产Blob 目的。 (前任。var blob = new Blob(variable); blob.filename = 'test.txt'; var data = {'uploaded_file': blob}; ) |
redirect |
字符串,指定在成功请求后将浏览器重定向到的 URL。 |
beforeUpdate |
在页面元素更新之前执行的回调函数。该函数获取 3 个参数:从服务器接收的数据对象、文本状态字符串和 jqXHR 对象。这this 函数内的变量解析为请求内容——一个包含 2 个属性的对象:handler 和options 代表原始的 request() 参数。 |
success |
请求成功时执行的回调函数。如果提供此选项,它将覆盖默认框架的功能:元素不更新,beforeUpdate 事件未触发,则ajaxUpdate 和ajaxUpdateComplete 事件不会被触发。事件处理程序获得 3 个参数:从服务器接收的数据对象、文本状态字符串和 jqXHR 对象。但是,您仍然可以调用默认框架功能调用this.success(...) 在你的函数中。 |
error |
发生错误时执行回调函数。默认情况下会显示警报消息。如果覆盖此选项,则不会显示警告消息。处理程序获得 3 个参数:jqXHR 对象、文本状态字符串和错误对象 - 请参阅jQuery AJAX 函数. |
complete |
回调函数在成功或错误的情况下执行。 |
form |
用于获取与请求一起发送的表单数据的表单元素,作为选择器字符串或表单元素传递。 |
flash |
当为 true 时,指示服务器清除并发送任何带有响应的 flash 消息。默认值:假 |
files |
当为真时,请求将接受文件上传,这需要FormData 浏览器的接口支持。默认值:假 |
browserValidate |
为真时,将在提交前对请求执行基于浏览器的客户端验证。这仅适用于在<form> 元素。NOTE: 这种验证形式不适用于复杂的表单,在复杂表单中,验证字段可能不会在 100% 的时间内对用户可见。建议您避免在最简单的表单以外的任何地方使用它。 |
loading |
请求运行时要显示的可选字符串或对象。字符串应该是元素的 CSS 选择器,对象应该支持show() 和hide() 功能来管理可见性。您可以传递全局对象$.wn.stripeLoadIndicator 使用时额外的框架. |
您还可以通过将新函数作为选项传递来覆盖某些请求逻辑。这些逻辑处理程序可用。
Handler | Description |
---|---|
handleConfirmMessage(message) |
请求用户确认时调用。 |
handleErrorMessage(message) |
在应显示错误消息时调用。 |
handleValidationMessage(message, fields) |
使用验证时聚焦第一个无效字段。 |
handleFlashMessage(message, type) |
当使用flash 选项(见上文)。 |
handleRedirectResponse(url) |
当浏览器应该重定向到另一个位置时调用。 |
使用示例
在发送 onDelete 请求之前请求确认:
$('form').request('onDelete', {
confirm: 'Are you sure?',
redirect: '/dashboard'
})
跑步onCalculate
处理程序并注入呈现的calcresult 部分进入页面元素result CSS类:
$('form').request('onCalculate', {
update: {calcresult: '.result'}
})
跑步onCalculate
带有一些额外数据的处理程序:
$('form').request('onCalculate', {data: {value: 55}})
跑步onCalculate
处理程序并在页面元素更新之前运行一些自定义代码:
$('form').request('onCalculate', {
update: {calcresult: '.result'},
beforeUpdate: function() { /* do something */ }
})
跑步onCalculate
处理程序,如果成功,运行一些自定义代码和默认success
功能:
$('form').request('onCalculate', {success: function(data) {
//... do something ...
this.success(data);
}})
执行没有 FORM 元素的请求:
$.request('onCalculate', {
success: function() {
console.log('Finished!');
}
})
跑步onCalculate
处理程序,如果成功,则在默认值之后运行一些自定义代码success
功能完成:
$('form').request('onCalculate', {success: function(data) {
this.success(data).done(function() {
//... do something after parent success() is finished ...
});
}})
全局 AJAX 事件
AJAX 框架在更新的元素、触发元素、表单和窗口对象上触发多个事件。无论使用哪个 API(数据属性 API 或 JavaScript API)都会触发事件。
Event | Description |
---|---|
ajaxBeforeSend |
在发送请求之前在窗口对象上触发。 |
ajaxBeforeUpdate |
在请求完成后直接在表单对象上触发,但在页面更新之前。处理程序获得 5 个参数:事件对象、上下文对象、从服务器接收的数据对象、状态文本字符串和 jqXHR 对象。 |
ajaxUpdate |
使用框架更新后在页面元素上触发。处理程序获得 5 个参数:事件对象、上下文对象、从服务器接收的数据对象、状态文本字符串和 jqXHR 对象。 |
ajaxUpdateComplete |
在框架更新所有元素后在 window 对象上触发。处理程序获得 5 个参数:事件对象、上下文对象、从服务器接收的数据对象、状态文本字符串和 jqXHR 对象。 |
ajaxSuccess |
请求成功完成后在表单对象上触发。处理程序获得 5 个参数:事件对象、上下文对象、从服务器接收的数据对象、状态文本字符串和 jqXHR 对象。 |
ajaxError |
如果请求遇到错误,则在表单对象上触发。处理程序获得 5 个参数:事件对象、上下文对象、错误消息、状态文本字符串和 jqXHR 对象。 |
ajaxErrorMessage |
如果请求遇到错误,则在窗口对象上触发。处理程序获取 2 个参数:事件对象和从服务器返回的错误消息。 |
ajaxConfirmMessage |
在 window 对象上触发时confirm 给出了选项。处理程序获取 2 个参数:作为事件的一部分分配给处理程序的事件对象和文本消息confirm 选项。这对于实现自定义确认逻辑/界面而不是本机 javascript 确认框很有用。 |
这些事件在触发元素上触发:
Event | Description |
---|---|
ajaxSetup |
在请求形成之前触发,允许通过context.options 目的。 |
ajaxPromise |
在发送 AJAX 请求之前直接触发。 |
ajaxFail |
如果 AJAX 请求失败,最终触发。 |
ajaxDone |
如果 AJAX 请求成功,最终触发。 |
ajaxAlways |
无论 AJAX 请求是失败还是成功都会触发。 |
使用示例
当ajaxUpdate
事件在元素上触发。
$('.calcresult').on('ajaxUpdate', function() {
console.log('Updated!');
})
使用逻辑处理程序执行显示 Flash 消息的单个请求。
$.request('onDoSomething', {
flash: 1,
handleFlashMessage: function(message, type) {
$.wn.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 = $.wn.stripeLoadIndicator
// Handle Error Messages by triggering a flashMsg of type error
context.options.handleErrorMessage = function(message) {
$.wn.flashMsg({ text: message, class: 'error' })
}
// Handle Flash Messages by triggering a flashMsg of the message type
context.options.handleFlashMessage = function(message, type) {
$.wn.flashMsg({ text: message, class: type })
}
})