JQuery Post + run php file> hide form> provide post

here is my code about jquery post. I cannot get it to work. I wasted hours :( what am I missing here ?! When I run the code, it loads the same page :(

I want it to run the php code in query.php and hide the contact form and give a "thank you!" message when sending send button click. (no page loading)

appreciates help!


PHP Form

<form id="commentForm" name="contact" method="post" action="">
    <ul id="contact-form">
        <li><label>Full Name: *</label><input type="text" name="full_name" class="txt_input required" /></li>
        <li><input type="submit" value="Send" id="btnsend" name="btnsend" class="btn_submit" /></li>
    </ul>
</form>

      


SCRIPT

$(function() {

    $("#btnsend").click(function() {
        var dataString = 'fullname='+ escape(full_name);
        $.ajax({
            type: "POST",
            url: "query.php?act=contact",
            data: dataString,
            success: function() {
            $('#contact-form').hide();
        $('#contact-form').html("<p>thanks!</p>")
        .fadeIn(1500, function() {$('#contact-form').append("");});
       } 

    });

    return false;
    });
 });

      

+2


source to share


6 answers


Your problem lies in: var dataString = 'fullname='+ escape(full_name);

Try: var dataString = 'fullname='+ escape(document.contact.full_name.value);

For example:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
 <title>Example</title>

 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
 <script type="text/javascript">
  $(function() {
   $("#btnsend").click(function() {
    var dataString = 'fullname='+ escape(document.contact.full_name.value);

    $.ajax( {
     type: "POST",
     url: "query.php?act=contact",
     data: dataString,
     success: function() {
      $('#contact-form').hide();
      $('#contact-form').html("<p>thanks!</p>").fadeIn(1500, function() { 
       $('#contact-form').append("");
      });
       }  
    });

    return false;
   });
  });
 </script>
</head>

<body>
 <form id="commentForm" name="contact" method="post" action="">
  <ul id="contact-form">
   <li><label>Full Name: *</label><input type="text" name="full_name" class="txt_input required" /></li>
   <li><input type="submit" value="Send" id="btnsend" name="btnsend" class="btn_submit" /></li>
  </ul>
 </form>
</body>

      



Make sure it exists query.php

, although it will not yet execute the callback on success.

Also make sure you are clicking the button and not pressing a key ENTER

as it will submit the form normally (you only defined an event handler for clicking the button not clicking)

+2


source


You can preventDefault on a button click or return false on the form submit event:

$(function() {
    $("#btnsend").click(function(e) {
            e.preventDefault();
            var full_name = $('input["name=full_name"]').val();
            var dataString = 'fullname='+ full_name;
            $.ajax({
              type: "POST",
              url: "query.php?act=contact",
              data: dataString,
              success: function() {
                    $('#contact-form').hide();
                    $('#contact-form').html("<p>thanks!</p>")
                                      .fadeIn(1500, function() {$('#contact-form').append("");});
               }
        });
    });
});

      



or

$('#commentForm').submit(function() {
    return false;
});

      

+2


source


Try:

$(function() {

$("#btnsend").click(function() {

        $.ajax({
          type: "POST",
          url: "query.php?act=contact",
          data: { fullname: $('input[name=full_name]').val() },
          success: function() {
        $('#contact-form').hide();
                $('#contact-form').html("<p>thanks!</p>")
        .fadeIn(1500, function() {$('#contact-form').append("");});
           } 

    });

    return false;
});
});

      

+1


source


I think you have at least 3 problems. First, you refer to full_name as a variable. I believe this throws a javascript error that aborts the function and allows the default action (post) to take place. Second, you probably need to encode ALL form parameters, including act

. This can result in an invalid URL being sent and thus the action did not appear to have been called - you can verify this by looking at the request sent from Firefox / Firebug. Third, you are trying to replace the contents of the list with a paragraph element. This is invalid HTML. I would replace the entire list with a paragraph (and I don't understand what adds a blank line at the end, so I omitted it).

Note. I changed this to work on the form submit event - so it doesn't matter how it was presented. Also lets me have a little jQuery niceness in that you don't have to search for the form again.

 $('#commentform').submit(function() {
   var $this = $(this);
   $.ajax({
     url: "query.php",
     data:  { 'act': 'contact', 'full_name', $('input[name="full_name"]').val() },
     success: function() {
        $('#contact-form').remove();
        $this.hide().html("<p>thanks!</p>").fadeIn(1500);
     }  
  });
  return false;
}

      

0


source


This is my way to call a PHP function directly through jQuery

// in html file
<script language="javascript">
  $.post("thisisphp.php",{ func:"true", varbl: 'valu2' },function(data) {
    $('.thisdiv #subdiv').html(data);
  });    
</script> 

      

PHP file thisisphp.php

<?php
    // include connection creating file.
    require_once("database.php");
    $db = & new Database();

    function getDateAppointments($varible1, $varible2, $db) {    
      $q_appointment = "SELECT * FROM `tbl_apoint` WHERE ap_date = '".$varible1."'"; 
      $s_appointment = $db->SelectQuery($q_appointment);

      while($r_appointment = mysql_fetch_array($s_appointment))
      {
        echo '<div id="appoinment">'.$r_appointment['ap_title'].'</div>'; 
      }     
    }    

    /* This function for set positions of the day */        
    switch($_POST['func']) {
      case 'true':
        getFunc1($_POST['varbl'], 'S0001', $db);
        break;
      default:
        getFunc2($_POST['varbl'], 'S0001', $db);        
    }    
?>

      

0


source


Can this one help you?

PS: you can put your schema and show the script form inside onSucces and onError functions.

0


source







All Articles