简体   繁体   中英

php jquery remote validate problem

  <script type="text/javascript">
  $().ready(function() {
 jQuery.validator.addMethod("captcha", function(value, element)  {
       $.ajax({ url: "verifyCap.php",
                type: "GET",
                data: "txtCaptcha="+value,
                success:        
                     function(msg) { 
                         if(msg == "true")
                               return true;  // already exists
                         return false; 
                        }
                  });
    },"");
// validate signup form on keyup and submit
$("#signupForm").validate({
    rules: {
        title: "required",
        contactname: "required",
        email: {
            required: true,
            email: true
        },
        comment: "required",
        txtCaptcha:{
            required: true,
            captcha: true
        }
    },
    messages: {
        contactname: "Please enter your contact name",
        email: "Please enter a valid email address",
        comment: "Please enter your system requierment",
        txtCaptcha: {
            required:"Please enter verification code",
            captcha: "The verification code is incorrect"
        }
    }
});
});

My verifyCap.php

<?php
 session_start ();
 if ($_SERVER ["REQUEST_METHOD"] != "GET")
  die ( "You can only reach this page by posting from the html form" );
 if (($_GET ["txtCaptcha"] == $_SESSION ["security_code"]) && (! empty ( $_GET ["txtCaptcha"] ) && ! empty ( $_SESSION ["security_code"] ))) {
   echo  "true";
 } else {
     echo "false";
}
 ?>

My problem might due to the response format it is not true or false, but i print out whole verifyCap code. Anyone can help?

An ajax request does an get by default instead of a post. Change:

if ($_SERVER ["REQUEST_METHOD"] != "POST")

to

if ($_SERVER ["REQUEST_METHOD"] != "GET")

besides that, do not use $_REQUEST to get your data. Use $_GET instead.

You could also add some settings your ajax request:

   type: "POST",
   data: "your params here",

You're receiving the whole verifyCap.php code because your PHP isn't interpreted by your web server.

In your verifyCap.php you are using the short tag notation ( <? //code?> ). Not all server uses this php extension, and it is considered deprecated. If your webserver doesn't use this extension, then your code is considered as an XML document, as XML document always start with <? <?-- some XML here --> ?> <? <?-- some XML here --> ?> .

Use <?php //code?> and your problem should be fixed.

Also, following @XpertEase answer isn't a bad idea either.

Edit: More info on PHP short tags Are PHP short tags acceptable to use? (via @XpertEase)

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