简体   繁体   中英

Prevent page refresh and submit form data

So I am trying to submit form data but do not want the page to change/refresh. At the sametime I want a jquery dialog to pop up when it has completed.

This is my original:

 <script>
  $( function() {
    $('#dialog-message').dialog({
      autoOpen: false,
      title: 'Basic Dialog'
    });



 $( "#subbutton" ).click(function( event ) {
       event.preventDefault();

       $.post("formaction.php",function(){
         $('#dialog-message').dialog('open');
         return false;
     });
 });
  });
  </script>

This submits blank data to the DB but it does insert a new row. Removing event.preventDefault(); submits all data but the page changes to formaction.php .

I tried to do polling but I am not really sure how to do it right. I will supply that code in a few as its on a different computer.

$( function() {
    $('#dialog-message').dialog({
      autoOpen: false,
      title: 'Basic Dialog'
    });

  });

    $( "#subbutton" ).click(function( event ) {
      $('#dialog-message').dialog('open');

      event.preventDefault();

      $(function poll(){

        setTimeout( function(){

          $.ajax({
            type:'POST',
            dataType: 'json',
            url:'formaction.php',
            success: function(data){

            },
            complete: poll
          }),
        },
        5000);

      })


      /*
      $.post("formaction.php",function(){
      return false;
    });
    event.preventDefault();
    */
  });
  poll();

Adding form for more detail

<div id="lostForm">
      <form name="lostForm" method="post" action="formaction.php" enctype="multipart/form-data">
        <h1> Owner Information</h1>
        <label for="fname">First Name</label>
        <input type="text" id="fname" name="firstname"  placeholder="First name" required>
        <br>  <br>
        <label for="lname">Last Name</label>
        <input type="text" id="lname" name="lastname"  placeholder="Last name" required>
        <br>  <br>
        <label for="mnumber">Mobile</label>
        <input id="mnumber" name="mobilenumber"  placeholder=" (###)###-####" required>
        <br>  <br>
        <label for="email">Email</label>
        <input type="text" id="email" name="email"  placeholder="email@example.com" required>
        <br>
        <br>
        <hr>
        <h1> Pet Information </h1>

        <br>
        <label for="pname">Pet Name</label>
        <input type="text" id="pname" name="petname" placeholder="Pet Name" required>
        <br> <br>
        <label for="petgen">Pet Gender</label>
        <select name="petgen" id="petgen" required>
          <option value="male"> Male </option>
          <option value="female"> Female </option>
        </select>
        <br> <br>
        <label for="pname">Pet Age</label>
        <input type="text" id="page" name="petage" placeholder="How old is your pet?" required>
        <br> <br>
        <label for="primary">Primary Color</label>
        <select name="color1" id="primary" required>
          <option value="black"> Black </option>
          <option value="brindle"> Brindle </option>
          <option value="cream"> Cream </option>
          <option value="red"> Red </option>
          <option value="white"> White </option>
          <option selected="selected" value="none"> --none-- </option>
        </select>
        <br> <br>
        <label for="secondary">Second Color</label>
        <select name="color2" id="secondary" required>
          <option value="black"> Black </option>
          <option value="brindle"> Brindle </option>
          <option value="cream"> Cream </option>
          <option value="red"> Red </option>
          <option value="white"> White </option>
          <option selected="selected" value="none"> --none-- </option>
        </select>
        <br> <br>
        <label for="markings">Markings</label>
        <input type="text" id="markings" name="marking" placeholder="Indetifiable Markings" optional>

        <br><br>

        <label for="fileToUpload">Upload Image:</label>
        <br>

        <input id="fileToUpload" type="file" name="fileToUpload">
        <br>
        <br>
        <hr>
        <h1> Location Lost </h1>
        <div id="locationField">
          <input id="autocomplete" placeholder="Enter your address"
          onFocus="geolocate()" type="text"></input>
        </div>

        <table id="address">
          <tr>
            <td class="label">Street address</td>
            <td class="slimField"><input class="field" id="street_number"
              disabled="true" name="streetAdd"></input></td>
              <td class="wideField" colspan="2"><input class="field" id="route"
                disabled="true"></input></td>
              </tr>
              <tr>
                <td class="label">City</td>
                <td class="wideField" colspan="3"><input class="field" id="locality"
                  disabled="true" name="city"></input></td>
                </tr>
                <tr>
                  <td class="label">State</td>
                  <td class="slimField"><input class="field"
                    id="administrative_area_level_1" disabled="true" name="state"></input></td>
                    <td class="label">Zip code</td>
                    <td class="wideField"><input class="field" id="postal_code"
                      disabled="true" name="zip"></input></td>
                    </tr>
                    <tr>
                      <td class="label">Country</td>
                      <td class="wideField" colspan="3"><input class="field"
                        id="country" disabled="true"></input></td>
                      </tr>
                    </table>


                    <button type="submit" value="Submit" name="submitbtn" id="subbutton">Submit </button>

                  </form>

Your ajax $.post() function is missing the data that you want to insert.

The easiest way to add that, is to serialize the form:

...
event.preventDefault();

$.post("formaction.php", $('form').serialize(), function(){
     $('#dialog-message').dialog('open');
});

Now all fields in the form element will be added to the post. If you have multiple forms, you can use the form's id to get the right one:

$.post("formaction.php", $('#your_form').serialize(), function(){
     $('#dialog-message').dialog('open');
});

Use ajax for this.

$.ajax({
          type: "POST",
          url:"<?php yourpage.php;?> ",
          data:your data,
          success: function(html){
           //show your message
          }
    });

your going to need to use the :success callback function.

$.post( "test.php", { name: "John", time: "2pm" })
  .done(function( data ) {
    alert( "Data Loaded: " + data );
  });

There's a simple solution to stop the redirection. Change the type of the button(#subbutton) add an attribute type="button"

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