首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展每个Ajax.Request onSuccess事件(Javascript原型框架)

扩展每个Ajax.Request onSuccess事件(Javascript原型框架)
EN

Stack Overflow用户
提问于 2008-11-13 09:16:35
回答 5查看 11K关注 0票数 0

我有一个应用程序,它在很多地方使用Ajax.Request及其onSuccess事件处理程序。

在所有这些onSuccess事件触发之前,我需要调用一个函数(它将检查响应)。我试着在onComplete事件中使用onComplete,但它在Ajax.RequestonSuccess事件之后触发。有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-11 04:02:11

这可能有点晚了,但为了其他对同样问题感到好奇的人的利益,我将提出这个解决方案:

您可以使用原型自己的面向方面编程的实现来实现这一点。当然,您必须修改所有onSuccess参数,但是可以通过简单的搜索和替换来完成,而不是更新所有回调函数。下面是一个Ajax.Request创建示例:

代码语言:javascript
复制
new Ajax.Request('example.html', {
    parameters: {action: 'update'},
    onSuccess: this.updateSuccessful
});

假设您有类似的代码片段散布在您的代码中,并且您希望在所有代码段前面加上一个特定的函数,该函数在实际函数运行之前验证响应(甚至根本无法运行)。通过使用Prototype中提供的Funtion.wrap,我们可以通过扩展上面的代码来做到这一点:

代码语言:javascript
复制
new Ajax.Request('example.html', {
    parameters: {action: 'update'},
    onSuccess: this.updateSuccessful.wrap(validateResponse)
});

其中'validateResponse‘是一个类似于此的函数:

代码语言:javascript
复制
// If you use the X-JSON-header of the response for JSON, add the third param
function validateResponse(originalFn, transport /*, json */) {
    // Validate the transport

    if (someConditionMet) {
        originalFn(transport /*, json */);
    }
}

因此,您只需快速搜索onSuccess并粘贴在'wrap(validateResponse)‘中,就可以在一个中心位置扩展您的onSuccess--函数。这也使您可以根据特定Ajax请求的需要,选择几个包装器函数。

票数 1
EN

Stack Overflow用户

发布于 2010-02-05 06:47:03

类似于Aleksander的回答,但我相信这将防止您在任何地方都使用“包装”,将其合并到onCreate响应程序中。

代码语言:javascript
复制
Ajax.Responders.register({

  onCreate: function(request) {

    request.options['onSuccess'] = request.options['onSuccess'].wrap(validateResponse);

  }

});
票数 4
EN

Stack Overflow用户

发布于 2008-11-13 09:21:57

您可以在onSuccess中的其他代码之前运行您的方法,并在出现问题时返回false。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/286603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档