Trevor Hutto
Trevor Hutto

Reputation: 2142

jQuery.ajax putting unwanted parameters in URL

I am using $.ajax to insert and update a database. I have a <form> on a webpage, and the $.ajax looks like this:

$('.submit-create-customer').on('click touchstart', function() {
    var first_name = $('#first_name').val();
    var last_name = $('#last_name').val();
    var email = $('#email').val();
    var confirm_email = $('#confirm_email').val();
    var phone = $('#phone').val();
    var address = $('#address').val();
    var address_2 = $('#address_2').val();
    var city = $('#city').val();
    var state = $('#state').val();
    var zipcode = $('#zipcode').val();

    var formData = "first_name=" + first_name + "&last_name=" + last_name + "&email=" + email + "&confirm_email=" + confirm_email + "&phone=" + phone + "&address=" + address + "&address_2=" + address_2 + "&city=" + city + "&state=" + state + "&zipcode=" + zipcode;
    $.ajax({ // Start the PHP submission
                url : "/resources/submit.php?action=createCustomer",
                type: "POST",
                data : formData,
                success: function(data, textStatus, jqXHR) {    //data - response from server
                    alert('success');
                },
                error: function(data, textStatus, jqXHR) {
                    alert('failure');
                }
            });

});

HTML:

<form class="validate">
    <div class="col-md-6">
        <input class="form-control input-md validate-name" id="first_name" name="first_name" minlength="2" type="text" placeholder="First Name">
        <input class="form-control input-md validate-name" id="last_name" name="last_name" minlength="2" type="text" placeholder="Last Name">
        <input class="form-control input-md validate-email" id="email" name="email" minlength="2" type="text" placeholder="Email">
        <input class="form-control input-md validate-email" id="confirm_email" name="confirm_email" minlength="2" type="text" placeholder="Confirm Email">
        <input class="form-control input-md validate-phone" id="phone" name="phone" type="text" placeholder="Phone">
    </div>
    <div class="col-md-6">
        <input class="form-control input-md validate-address" id="address" name="address" type="text" placeholder="Address">
        <input class="form-control input-md validate-address" id="address_2" name="address_2" type="text" placeholder="Address Line 2">
        <input class="form-control input-md validate-name" id="city" name="city" type="text" placeholder="City">
        <select class="form-control input-md validate-select" id="state" name="state">
            <option value="-1" disabled selected>State</option>
            <option value="AL">Alabama</option>
            <option value="AK">Alaska</option>
            <option value="WI">Wisconsin</option>
            <option value="WY">Wyoming</option>
        </select>
        <input class="form-control input-md validate-zipcode" id="zipcode" name="zipcode" type="text" placeholder="Zipcode">
    </div>
    <button class="btn btn-md submit-create-customer" disabled>Submit</button>
</form>

The URL returns either true or false. After I get the alert, the same webpage that I made the request from gets reloaded with a bunch of URL parameters. It looks something like this:

/customers.php?first_name=Trevor&last_name=Hutto&email=this%40that.com&confirm_email=this%40that.com&phone=1234567891&address=1234+Memory+Lane&address_2=Apt.+1131&city=New+York&state=NY&zipcode=12345

Why is this happening when I have declared the request type as POST? Also, isn't the point of AJAX to be asynchronous and make request in the background? Why is the page reloading?

Upvotes: 1

Views: 777

Answers (1)

powerbuoy
powerbuoy

Reputation: 12838

My guess is that since you don't prevent the normal action from firing the browser runs your code and after that behaves the way it would normally.

Try changing:

$('.submit-create-customer').on('click touchstart', function() {
    // Other code

To:

$('.submit-create-customer').on('click touchstart', function(e) {
    e.preventDefault();
    // Other code

Edit: Also, if this is a form, I can highly recommend the jQuery.form plugin (http://malsup.com/jquery/form/).

One more thing, if this is indeed a form, don't hook a click event to the submit button, instead hook a submit event to the actual form. This way users can submit the form in any way and it will still be handled with ajax.

I think it'd help if you showed your HTML as well.

Upvotes: 2

Related Questions