简体   繁体   中英

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM