After a little more twiddling ... This works:

$(document).ready(function(){
        $("form#submit").submit(function() {
          var email = $('#email').attr('value');
          $.ajax({
            type: "POST",
            url: "ajax.php",
            data: "email="+ email,
            success: function(res){
              if(res == "{\"result\":1}") {
                $('form#submit').hide();
                $('div.error').hide();
                $('div.success').fadeIn('medium');
              } else {
                $('div.error').show();
              }
            }
          });
          return false;
        });
      });

The json object contains what I need but I can only test it as if it
were a string.  res.result is undefined. Why?

Thanks in advance for any help!

Rob.

rob303 wrote:
> Hi again,
>
> I tried that but got the same results.
>
> if(res.result == '1') {
>   $('form#submit').hide();
>   $('div.success').fadeIn('medium');
> } else {
>   $('div.error').show();
> }
>
> if(res.result == 1) {
>   $('form#submit').hide();
>   $('div.success').fadeIn('medium');
> } else {
>   $('div.error').show();
> }
>
> res.result is always false even though firebug says the response is
> {"result":1}.
>
> Rob.
>
>
>
> On Jan 4, 7:01�pm, donb <falconwatc...@comcast.net> wrote:
> > On another thread, someone pointed out to me that json_encode was
> > supposed to 'know' if the data values were numeric or string and only
> > quote the latter. �That was not my experience, and perhaps not yours,
> > either. �Try '1' as the value you compare to instead of 1.
> >
> > On Jan 4, 1:05�pm, rob303 <r...@cube33.com> wrote:
> >
> > > Interestingly, in the Firebug console I'm seeing the correct
> > > responses:
> >
> > > {"result":1}
> >
> > > or
> >
> > > {"result":0}
> >
> > > How can I access these inside my $.ajax() call?
> >
> > > Many thanks again for all the help!
> >
> > > Rob.
> >
> > > On Jan 4, 5:57�pm, rob303 <r...@cube33.com> wrote:
> >
> > > > 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('some-em...@email.com', '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('....@cube33.com', '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 <falconwatc...@comcast.net> 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 <r...@cube33.com> 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('some-em...@email.com', '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 <falconwatc...@comcast.net> 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 <r...@cube33.com> 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('some-em...@email.com', '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.

Reply via email to