1

これをチェックしてください。次の構文で作成されたかなり単純なフォームがあります。

<%= form_for([@issue, @issue_order], :remote => true) do |f| %>

ページのロジックにより、フォームは実際には次のように JavaScript を介して呼び出されます。

$('#new_issue_order')[0].submit()

コントローラーは、少しのロジックを実行して ajax リクエストを処理し、次のようなものをスローします。

    respond_to do |format|
      format.js
    end

この応答を処理する AJAX は、次の JavaScript にあります。

$('#new_issue_order').on('ajax:success', issueOrder.processOrder)
..........
  processOrder: function(e, data, status, xhr) {
      $('.sign-up-errors').empty();
      errors = xhr.getResponseHeader('X-Flash-Error').split(',');
      for (i=0; i < errors.length; i++) {
        $('.errors').append($('<p>' + errors[i] + '</p>'));
      }
      setTimeout(function() {
        $('.errors').empty();
      }, 3500);·
  }

これでリモートリクエストに応答できると思いましたが、代わりに次のエラーが表示されます。

ActionController::UnknownFormat

ビューで new.js.erb を作成しようとしましたが (それがあった新しいページに対応するため)、それでも同じエラーが発生します。ビジネス上の理由から、アセット内の javascript ファイルで JavaScript 処理を維持したいので、サクセス ハンドラー AJAX を new.js.erb コードに移行しようとはしていません。

シームレスな AJAX 応答を取得するにはどうすればよいですか? 以前にやったことがありますが、respond_to はいつも私を混乱させました。

4

1 に答える 1