ReactJS Netlify Form POST 404 error

I created a portfolio website using create-react-app. When I submit the form in it no response received and I get this error on console: “POST https://salman-ar.netlify.app/inc/sendEmail.php 404”

I tried many of the stuff in the FAQ. I’ve added a hidden form in index.html and used the functions from the documentation in the js file. I also tried adding hidden input tag along with the functions. Still doesn’t work. I also tried the Gatsby method. Same. Here’s a direct link to the form: Portfolio | Salman. I also get this error in the console, don’t know if it is connected: “Error during service worker registration: TypeError: Failed to register a ServiceWorker for scope (‘mysite’) with script (‘mysite/service-worker.js’): A bad HTTP response code (404) was received when fetching the script.”

Thank you!

Here’s a link to my deployment: https://salman-ar.netlify.app/
My GitHub repo is linked in the script and html lines

Hi @salman-ar-sar,

Welcome to the Netlify community.

As per the Support Guide linked below you cannot POST to a PHP script as Netlify doesn’t support PHP in that manner.

You can use Netlify’s built-in form handling (which based on the page source you have configured through the use of data-netlify="true") or post to a serverless function.

Hope this helps.

But I’m not trying to do that. Maybe the template I’m using is doing it. Could you please show me where the issue? I want to use Netlify’s built-in form handling.

import React, { Component } from "react"; const encode = (data) => { return Object.keys(data) .map((key) => encodeURIComponent(key) + "=" + encodeURIComponent(data[key])) .join("&"); }; class Contact extends Component { constructor(props) { super(props); this.state = { form_name: "", form_email: "", form_subject: "", form_message: "", }; } handleSubmit = (e) => { fetch("/", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: encode({ "form-name": "contactForm", ...this.state }), }) .then(() => alert("Success!")) .catch((error) => alert(error)); e.preventDefault(); }; handleChange = (e) => this.setState({ [e.target.name]: e.target.value }); render() { if (this.props.data) { var name = this.props.data.name; var street = this.props.data.address.street; var city = this.props.data.address.city; var state = this.props.data.address.state; var zip = this.props.data.address.zip; var phone = this.props.data.phone; // var email = this.props.data.email; var message = this.props.data.contactmessage; } const { form_name, form_email, form_subject, form_message } = this.state; return ( <section id="contact"> <div className="row section-head"> <div className="two columns header-col"> <h1> <span>Get In Touch.</span> </h1> </div> <div className="ten columns"> <p className="lead">{message}</p> </div> </div> <div className="row"> <div className="eight columns"> <form id="contactForm" name="contactForm" onSubmit={this.handleSubmit} data-netlify="true" data-netlify-honeypot="bot-field" method="post" > <input type="hidden" name="form-name" value="contactForm" /> <fieldset> <div> <label htmlFor="contactName"> Name <span className="required">*</span> </label> <input type="text" // defaultValue="" size="35" id="contactName" name="form_name" value={form_name} onChange={this.handleChange} /> </div> <div> <label htmlFor="contactEmail"> Email <span className="required">*</span> </label> <input type="text" // defaultValue="" size="35" id="contactEmail" name="form_email" value={form_email} onChange={this.handleChange} /> </div> <div> <label htmlFor="contactSubject">Subject</label> <input type="text" // defaultValue="" size="35" id="contactSubject" name="form_subject" value={form_subject} onChange={this.handleChange} /> </div> <div> <label htmlFor="contactMessage"> Message <span className="required">*</span> </label> <textarea cols="50" rows="15" id="contactMessage" value={form_message} name="form_message" onChange={this.handleChange} ></textarea> </div> <div> <button className="submit">Submit</button> <span id="image-loader"> <img alt="" src="images/loader.gif" /> </span> </div> </fieldset> </form> <div id="message-warning"> Error boy</div> <div id="message-success"> <i className="fa fa-check"></i>Your message was sent, thank you! <br /> </div> </div> <aside className="four columns footer-widgets"> <div className="widget widget_contact"> <h4>Address and Phone</h4> <p className="address"> {name} <br /> {street} <br /> {city}, {state} {zip} <br /> <span>{phone}</span> </p> </div> {/* <div className="widget widget_tweets"> <h4 className="widget-title">Latest Tweets</h4> <ul id="twitter"> <li> <span> This is Photoshop's version of Lorem Ipsum. Proin gravida nibh vel velit auctor aliquet. Aenean sollicitudin, lorem quis bibendum auctor, nisi elit consequat ipsum <a href="#">http://t.co/CGIrdxIlI3</a> </span> <b><a href="#">2 Days Ago</a></b> </li> <li> <span> Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi <a href="#">http://t.co/CGIrdxIlI3</a> </span> <b><a href="#">3 Days Ago</a></b> </li> </ul> </div> */} </aside> </div> </section> ); } } export default Contact; 

This is my index.html:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="theme-color" content="#000000"> <link rel="manifest" href="%PUBLIC_URL%/manifest.json"> <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> <link rel="stylesheet" href="%PUBLIC_URL%/css/default.css"> <link rel="stylesheet" href="%PUBLIC_URL%/css/layout.css"> <link rel="stylesheet" href="%PUBLIC_URL%/css/media-queries.css"> <link rel="stylesheet" href="%PUBLIC_URL%/css/magnific-popup.css"> <title>Portfolio | Salman</title> </head> <body> <noscript> You need to enable JavaScript to run this app. </noscript> <form name="contactForm" netlify netlify-honeypot="bot-field" hidden> <input type="text" name="form_name" /> <input type="text" name="form_email" /> <input type="text" name="form_subject" /> <textarea name="form_message"></textarea> </form> <div id="root"></div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/jquery-1.10.2.min.js"><\/script>')</script> <script type="text/javascript" src="js/jquery-migrate-1.2.1.min.js"></script> <script src="js/jquery.flexslider.js"></script> <script src="js/waypoints.js"></script> <script src="js/jquery.fittext.js"></script> <script src="js/magnific-popup.js"></script> <script src="js/init.js"></script> </body> </html> 

The form submission is handled by an AJAX function in js/init.js.
Look for the following.

/*----------------------------------------------------*/ /*	contact form ------------------------------------------------------*/ $('form#contactForm button.submit').click(function() { // rest of the function here... }); 

Removing this section of JavaScript should mean the form is then handled by Netlify.

2 Likes

Thank you so much! That worked!

2 Likes