0

我正在尝试flash('error', 'error text')通过 ajax 请求来提醒网页发生了错误。ajax 请求会触发涉及某些数据库工作的操作,并且可能会产生错误。

控制器:

load('application');

action('index', function() {
    this.title = 'Sample Page';
    render();
});

action('test', function() {
    flash('error', 'test error message');
    render('index', { title: 'Sample Page' });
});

示例 ajax 调用:

$.ajax({
    url: '/test-error',
    success: function(response) {
        console.log(response);
    },
    error: function(response) {
        console.log(response);
    }
});

路线:

map.get('test', 'test-error#index');
map.get('test-error', 'test-error#test');

这甚至可以通过ajax调用来实现吗?我试过使用flash,然后render('index')如上所示,但redirect(path_to.test);没有成功。send(500, 'error message');将错误返回给 ajax 调用,如有必要,我可以从那里重新加载页面。

4

2 回答 2

2

Flash 消息通常在布局模板中制作成 html(查看生成的 application_layout)。因此,如果您使用 render(),它只会生成 html 并将其发送回客户端(如果您在模板中将其打印出来,则会在其中显示错误消息)。

如果要从服务器向客户端发送错误消息,可以使用 send([msgNo])。

于 2013-09-04T17:35:27.660 回答
0

我最终使用该send方法将错误返回到页面,然后我flash在 javascript 中创建了一个函数,该函数类似于服务器生成消息的方式闪烁,并使用 ICanHaz.js 生成 HTML。

在 app/views/layouts/application_layout.ejs 中,我将包含警报的 div 修改为具有 id flashMessage

<div class="large-10 columns white maincontent" id="divContent">
    <% var flash = request.flash('info').pop(); if (flash) { %>
    <div id="flashMessage" class="alert alert-info">
        <a class="close" data-dismiss="alert">×</a>
        <%- flash %>
    </div>
    <% } %>
    <% flash = request.flash('error').pop(); if (flash) { %>
    <div id="flashMessage" class="alert alert-error">
        <a class="close" data-dismiss="alert">×</a>
        <%- flash %>
    </div>
    <% }; %>
  <%- body %>
</div>

小胡子模板(用于 ICanHaz,ich.flash):

<div id="flashMessage" class="alert alert-{{type}}">
    <a class="close" data-dismiss="alert">×</a>
    {{msg}}
</div>

Javascript Flash 功能:

function flash(type, msg) {
    if (type == 'clear') {
        $('#divContent #flashMessage').remove();
        return;
    }
    if (!ich.hasOwnProperty('flash')) {
        setTimeout(function () {flash(type, msg);}, 100);
        return;
    }
    var result = ich.flash({ type: type, msg: msg});
    if ($('#flashMessage').length > 0) {
        $('#flashMessage').replaceWith(result);
    } else {
        $('#divContent').prepend(result);
    }
}
于 2013-09-13T20:04:37.180 回答