0

flash('error', 'error text')ajaxリクエストを介してエラーが発生したことをWebページに警告するために使用しようとしています。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');

4

2 に答える 2

2

フラッシュ メッセージは通常、レイアウト テンプレートで 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 フラッシュ機能:

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 に答える