Yes, the missing semicolons are an error in the post. I tried to echo
the json_encode() call but I still can't get it to work. If I leave
the email input blank no email is sent. If I enter a string the email
is sent. The 'div.error' is always displayed regardless what's posted.
Here's my full code again:
------------------
HTML / Ajax
------------------
<?php
require_once("../inc/site_config.php");
require_once(SITE . "/includes.php");
?>
<html>
<head>
<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("form#submit").submit(function() {
var email = $('#email').attr('value');
$.ajax({
type: "POST",
url: "ajax.php?v=1",
data: "email="+ email,
success: function(res){
if(res.result == 1) {
$('form#submit').hide();
$('div.success').fadeIn('medium');
} else {
$('div.error').show();
}
}
});
return false;
});
});
</script>
</head>
<body>
<form id="submit" method="post">
Email:
<input id="email" class="text" name="email" size="20"
type="text" />
<input type="submit" value="send mail" />
</form>
<div class="success" style="display:none;">
Email sent.
</div>
<div class="error" style="display:none;">err</div>
</body>
</html>
--------------
PHP
--------------
<?php
require_once("includes.php");
$message = $_POST['email'];
if($message != '') {
mail('[email protected]', 'Ajax test', $message);
$json_data = array('result' => 1);
} else {
$json_data = array('result' => 0);
}
echo json_encode($json_data);
?>
$message = $_POST['email'];
if($message != '') {
mail('[email protected]', 'Ajax test', $message);
$json_data = array('result' => 1);
} else {
$json_data = array('result' => 0);
}
echo json_encode($json_data);
?>
--------------
On Jan 4, 5:44 pm, donb <[email protected]> wrote:
> You must 'echo' the JSON output. Also you indicate periods ending
> code lines, instead of semicolons but perhaps that's just an error in
> your post, not the actual code?
>
> On Jan 4, 10:38 am, rob303 <[email protected]> wrote:
>
> > Hi,
>
> > Many thanks for the help. I had a go at implementing what you
> > suggested but I'm clearly still missing something.
>
> > Here is my $.ajax() call:
> > ------------------
> > $(document).ready(function(){
> > $("form#submit").submit(function() {
> > var email = $('#email').attr('value');
> > $.ajax({
> > type: "POST",
> > url: "ajax.php",
> > data: "email="+ email,
> > success: function(del){
> > if(del.result == 1) {
> > $('form#submit').hide();
> > $('div.success').fadeIn('medium');
> > } else {
> > $('div.error').show();
> > }
> > }
> > });
> > return false;
> > });
> > });
> > ------------------
>
> > And here is my json array in PHP:
> > ------------------
> > $message = $_POST['email'];
>
> > if($message != '') {
> > mail('[email protected]', 'Ajax test', $message);
> > $json_data = array('result' => 1).} else {
>
> > $json_data = array('result' => 0, 'error' => 'This is an error').
>
> > }
>
> > json_encode($json_data);
> > ------------------
>
> > I'm obviously not accessing del.result correctly because $
> > ('div.error').show(); is always executed regardless of the value of
> > result. Where am I going wrong?
>
> > Thanks in advance,
>
> > Rob.
>
> > On Jan 4, 2:41 pm, donb <[email protected]> wrote:
>
> > > Return a JSON object.
>
> > > Construct a PHP array such as $json_data = array('result' => 0,
> > > 'error' => 'This is an error'). End your PHP script with json_encode
> > > ($json_data). Then you can reference del.result and del.error (I'm
> > > referring to your definition of the' success' function from your
> > > sample code)
>
> > > On Jan 4, 7:16 am, rob303 <[email protected]> wrote:
>
> > > > Hi,
>
> > > > I'm new to ajax and jquery but I'm not new to PHP. The following
> > > > example seems to work okay to a point but I can't figure out how to
> > > > handle data validation errors generated in my PHP.
>
> > > > In my example I want to post some data to a script called ajax.php.
> > > > That script will check the data for validity and then return true or
> > > > false depending on the outcome of the checks. It will also set an
> > > > appropriate error message.
>
> > > > How can I handle the returned data and display an error message if
> > > > needed in ajax?
>
> > > > ----------------------
> > > > HTML / Ajax - test.php
> > > > ----------------------
> > > > <?php
>
> > > > require_once("includes.php");
>
> > > > ?>
> > > > <html>
> > > > <head>
> > > > <script src="js/jquery.js" type="text/javascript"></script>
> > > > <script type="text/javascript">
> > > > $(document).ready(function(){
> > > > $("form#submit").submit(function() {
> > > > var email = $('#email').attr('value');
> > > > $.ajax({
> > > > type: "POST",
> > > > url: "ajax.php",
> > > > data: "email="+ email,
> > > > success: function(del){
> > > > $('form#submit').hide();
> > > > $('div.success').fadeIn('medium');
> > > > // what if the data failed validation in PHP?
> > > > // we need to show 'div.error".
> > > > }
> > > > });
> > > > return false;
> > > > });
> > > > });
> > > > </script>
> > > > </head>
> > > > <body>
> > > > <form id="submit" method="post">
> > > > Email:
> > > > <input id="email" class="text" name="email" size="20"
> > > > type="text" />
> > > > <input type="submit" value="send mail" />
> > > > </form>
> > > > <div class="success" style="display:none;">
> > > > Email sent.
> > > > </div>
> > > > <div class="error">
> > > > <?php echo $userError; ?>
> > > > </div>
> > > > </body>
> > > > </html
>
> > > > ----------------------
> > > > PHP - ajax.php
> > > > ----------------------
> > > > <?php
>
> > > > require_once("includes.php");
>
> > > > $message = $_POST['email'];
>
> > > > if($message != '') {
> > > > mail('[email protected]', 'Ajax test', $message);
> > > > return 1;} else {
>
> > > > $userError = "Please enter your email address";
> > > > return 0;
>
> > > > }
>
> > > > ?>
>
> > > > I've been searching the web for an answer but can't find one
> > > > anywhere! Any help would be greatly appreciated.