Traditional AJAX using serializeArray() does not handle file inputs. For forms with file uploads, you need to use the FormData API:

// Tell Gravity Forms to process the submission but not to output anything $_POST['gform_submit'] = $form_id; $result = GFFormDisplay::process_form( $form_id, $form );

If you ask a developer what the most important part of a website is, they might say "clean code." If you ask a marketer, they might say "the Call to Action." But if you ask a user, the answer is almost always

Because AJAX relies heavily on JavaScript to serialize the form data and listen for the server response, it is fragile. Gravity Forms generally plays nice with the WordPress ecosystem, but it is the first thing to break when: