【发布时间】:2015-02-10 17:00:24
【问题描述】:
function form_submit(){
$('form[action="/specific"]').on("submit", function(e){
e.preventDefault();
var $this = $(this)
var data = $this.serialize()
return $.ajax({
"method": "get",
"url": "https://endpoint.com",
"data": {
"data": data
}
})
})
}
我希望能够从函数外部捕获来自$.ajax 的承诺。像form_submit().then() 这样的东西不起作用,因为它都包含在.on 事件中。有人如何能够从事件中返回类似这样的特定内容?
是否以request为参数触发自定义事件?
function form_submit(){
return $('form[action="/specific"]').on("submit", function(e){
e.preventDefault();
var $this = $(this)
var data = $this.serialize()
var request = $.ajax({
"method": "get",
"url": "https://endpoint.com",
"data": {
"data": data
}
})
$this.trigger("submitted", [request]);
})
}
form_submit().on("submitted", function(e, request){
request.then(function(response){
console.log("logging")
console.log(response)
});
});
【问题讨论】:
-
你为什么把
submit事件处理器放在form_submit函数里面? -
@Regent 作为一个经验法则,我不喜欢我的任何 jQuery 代码感染全局范围,也适合使用模块加载器(es6、commonjs、amd)导出变量,所以我的大部分 jquery选择器被包装在函数中。我的代码看起来更像这样gist.github.com/reggi/3898f13c4fb392c96132#file-klaviyo-js,使用 es6 模块导入和导出。
-
@Regent 我也可以像这样返回提交的事件回调,完全不使用选择器。用法在gist.github.com/reggi/3898f13c4fb392c96132#file-klaviyo-alt-js下方注释掉了
-
经典 DOM 事件是同步的,它们不支持这一点。但是新的 API 添加了
event.waitUntil(promise)方法。 -
只返回函数的函数...你不觉得你的代码过于复杂了吗?但是即使在你奇怪的代码中,你仍然可以使用$.Deferred()。
标签: jquery ajax events promise