On Sun, May 31, 2020 at 12:34 AM Craig Russell <apache....@gmail.com> wrote:
>
> So I have now added some data to the "rescind emeritus request" button [1].
> This data is the file name from the emeritus_request, and it is also now data 
> available to the submit function. (If there is a better way to do this, 
> please let me know.)
>
> The data is read in the submit function [2]. But it doesn't work. What is the 
> right way to send additional data fields in the POST request? I have verified 
> via the console log that the data (emeritus_file_name) is proper, but I get 
> an exception trying to put it into the formData.
> TypeError: undefined is not an object (evaluating 'formData.push') line 371

Move line 371 after what is line 374 in the code below.

> What I'm trying to do is to have the file name available to the 
> memstat.json.rb file that handles the POST request. Is the entire committer 
> transmitted on the POST, or just the few changed fields?
>
> Thanks,
> Craig

- Sam Ruby

> [1]             if (owner)
>                if committer.member.status.include? 'Active'
>                  emeritus_file_name = committer.forms['emeritus_request']
>                  if committer.forms['emeritus_request']
>                    console.log('owner emeritus file is: ' + 
> committer.forms['emeritus_request'])
>                    _button.btn.btn_primary 'rescind emeritus request',
>                      data_emeritus_file_name:emeritus_file_name,
>                      name: 'action', value: 'rescind_emeritus'
>                  else
>                    _button.btn.btn_primary 'request emeritus status',
>                      name: 'action', value: 'request_emeritus'
>                  end
>                elsif committer.member.status.include? 'Emeritus'
>                  _button.btn.btn_primary 'request reinstatement',
>                    name: 'action', value: 'request_reinstatement'
>                end
>
> [2] # submit form using AJAX
>   def submit(event)
>     event.preventDefault()
>     form = jQuery(event.currentTarget).closest('form')
>     target = event.target
>
>     # if (cancel) button is pressed, don't submit but remove @edit form
>     cancel_submit = target.getAttribute('data-cancel-submit')
>
>     if cancel_submit
>       # remove the edit buttons and return
>       @edit = nil
>       return
>     end
>
>     # if additional data, add it to formData
>     emeritus_file_name = target.getAttribute('data-emeritus-file-name')
>     console.log('submit emeritus_file_name: ' + emeritus_file_name)
>     if emeritus_file_name
> 371:      formData.push name: 'emeritusfilename', value: emeritus_file_name
>     end
>     # serialize form
>     formData = form.serializeArray();
>
>     # add button if it has a value
>     if target and target.getAttribute('name') and target.getAttribute('value')
>       formData.push name: target.getAttribute('name'),
>         value: target.getAttribute('value')
>     end
>
>
> Craig L Russell
> c...@apache.org
>

Reply via email to