首页 > 解决方案 > Elixir/Phoenix - 控制器中的 HTML 表单解析

问题描述

我有一个 HTML 表单:

<form id="filtering-rule-form">
<input type="hidden" value="<%= @token %>" name="_csrf_token"/>

User name/email prefix:<br>
<input type="text" name="email-prefix" id="email-prefix">@railglorg.net<br>
Scanner<br>
    <%= for scanner <- @scanners do %>
        <input type="checkbox" id="<%= scanner.short_name %>" value="<%= scanner.short_name %>" name="scanner[]" /><%= scanner.scanner_name %> <br>
    <% end %>

Subject<br>
<input type="text" name="subject" id="subject"><br>
Quarantine score threshold:<br>
<input type="text" name="quarantine-score" id="quarantine-score"><br>
Delete score threshold:<br>
<input type="text" name="delete-score" id="delete-score"><br>
Reject:<br>
<input type="radio" name="reject" value="reject" id="reject-reject" checked > Reject<br>
<input type="radio" name="reject" value="delete" id="reject-delete" > Delete<br>
<button type="button" id="filtering-rule-save-btn">Save</button>
</form>

来自它的数据通过 ajax 请求传输到控制器。

$('#filtering-rule-save-btn').click(function(){
    $.ajax({
        type: 'POST',
        url: '/configuration/filtering_rule_save',
        dataType: 'JSON',
        headers: {'X-CSRF-Token': jQuery('input[name=_csrf_token]').val()},
        data: {
            filtering_rule_form_data: $("#filtering-rule-form").serialize()
        },
        success: function(response) {
            alert(response.message);
        },
        error: function(response) {
            alert('AJAX ERROR');
        }
    });
});

这样的字符串被传递给控制器​​。

_csrf_token=KnNgSz9UKy80eyFdNVoMAFEwDSw9GiE3EFRswlOkR9CiRk9mgWFhtVsp&email-prefix=test&scanner%5B%5D=ps&scanner%5B%5D=clamdscan&subject=test-subject&quarantine-score=5&delete-score=5&reject=reject

在此处输入图像描述

我在控制器中得到这条线。

  def filtering_rule_save(conn, %{"filtering_rule_form_data" => filtering_rule_form_data}) do
    #
  end

我不知道如何正确解析控制器中的所有表单值。请注意,表单有一个 HTML 数组 (scanner[])。我将不胜感激。

标签: elixirphoenix-frameworkphoenix

解决方案


推荐阅读