jshimazu
7/28/2017 - 11:31 AM

javascriptだけでform送信

javascriptだけでform送信

  /**
   * Formとして送信
   * https://developer.mozilla.org/ja/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
   */
  function _sendForm(method, url, data) {
    var form = document.createElement("form");
    var node = document.createElement("input");
    var csrfToken = document.head.querySelector('meta[name=csrf-token]').getAttribute('content');
    form.method = method;
    form.action = url;

    data['authenticity_token'] = csrfToken;

    Object.keys(data).forEach(function(key){
      if (typeof(data[key]) === 'string') {
        node.name = key;
        node.value = data[key].toString();
        form.appendChild(node.cloneNode());
      } else if (typeof(data[key] === 'array')) {
        data[key].forEach(function(row){
          Object.keys(row).forEach(function(childKey){
            node.name = key + '[]['+childKey+']'
            node.value = row[childKey];
            form.appendChild(node.cloneNode());
          });
        });
      }
    });

    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
  }