M.E.
M.E.

Reputation: 5496

Serialize a form in order to send it via Ajax

I want to send a form via Ajax, not via a submit button.

I defined the form as follows in the below code excerpt, and later I defined the jQuery function to trap the CREATE BUTTON action.

When I debug this I get that

console.log($('#customer_form').serialize()); does not throw anything.

Here is the used code:

HTML:

<form id="customer_form" role="form">

    <div class="form-group">
        <label class="col-sm-4 control-label" for="name">Name</label>
        <div class="col-sm-8">
            <input type="text" class="form-control" id="name" aria-describedby="name_help" placeholder="Name">
            <small id="name_help" class="form-text text-muted"></small>
        </div>
    </div>


    <div class="form-group">
        <label class="col-sm-4 control-label" for="address_line_1">Address</label>
        <div class="col-sm-8">
            <input type="text" class="form-control" id="address_line_1" aria-describedby="address_line_1_help" placeholder="Address Line 1">
            <small id="address_line_1_help" class="form-text text-muted"></small>
        </div>
    </div>


    <div class="form-group">
        <label class="col-sm-4 control-label" for="address_line_2"></label>
        <div class="col-sm-8">
            <input type="text" class="form-control" id="address_line_2" aria-describedby="address_line_2_help" placeholder="Address Line 2">
            <small id="address_line_2_help" class="form-text text-muted"></small>
        </div>
    </div>


    <div class="form-group">
        <label class="col-sm-4 control-label" for="town">Town</label>
        <div class="col-sm-8">
            <input type="text" class="form-control" id="town" aria-describedby="town_help" placeholder="Town">
            <small id="town_help" class="form-text text-muted"></small>
        </div>
    </div>

    <button id="create" class="btn btn-sm btn-primary pull-right m-t-n-xs" type="button"><strong>Save</strong></button>

</form>

JavaScript:

$(document).ready(function(){
    $('#create').click(function(event) {
        console.log('foo');
        alert($('#customer_form').serialize());
        event.preventDefault();
    });
});

Upvotes: 2

Views: 57

Answers (1)

Bourbia Brahim
Bourbia Brahim

Reputation: 14702

You just forgot to add the name attribute to your inputs:

<input name="nameofInput" .... />
-------^

See the below snippet:

$(document).ready(function(){
      $('#create').click(function(event) {
          console.log('foo');
          alert($('#customer_form').serialize());
          event.preventDefault();
      });
  });
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="customer_form" role="form">

    <div class="form-group">
        <label class="col-sm-4 control-label" for="name">Name</label>
        <div class="col-sm-8">
            <input type="text" class="form-control" name="name" id="name" aria-describedby="name_help" placeholder="Name">
            <small id="name_help" class="form-text text-muted"></small>
        </div>
    </div>


    <div class="form-group">
        <label class="col-sm-4 control-label" for="address_line_1">Address</label>
        <div class="col-sm-8">
            <input type="text" class="form-control"  name="adress1" id="address_line_1" aria-describedby="address_line_1_help" placeholder="Address Line 1">
            <small id="address_line_1_help" class="form-text text-muted"></small>
        </div>
    </div>


    <div class="form-group">
        <label class="col-sm-4 control-label" for="address_line_2"></label>
        <div class="col-sm-8">
            <input type="text" class="form-control" name="adress2" id="address_line_2" aria-describedby="address_line_2_help" placeholder="Address Line 2">
            <small id="address_line_2_help" class="form-text text-muted"></small>
        </div>
    </div>


    <div class="form-group">
        <label class="col-sm-4 control-label" for="town">Town</label>
        <div class="col-sm-8">
            <input type="text" class="form-control" name="town" id="town" aria-describedby="town_help" placeholder="Town">
            <small id="town_help" class="form-text text-muted"></small>
        </div>
    </div>

    <button id="create" class="btn btn-sm btn-primary pull-right m-t-n-xs" type="button"><strong>Save</strong></button>

</form>

Upvotes: 2

Related Questions