开发者

Trouble using jQuery post inside non jQuery function

I have the following script inside a HTML page:

<script>

function Test(){

alert("i got here");

 var username = document.registration_form.username.value;

 alert(username);

 $.post("checkname.php", { name:  username }, function(data) {

   alert("and here");

   alert(data);

   if (data = "0"){
       alert('That username is already in use, please choose another');
    return false;
   };
   if (data = "1") {
    return true;   
   };

});
};

</script>

I'm trying to get the function test to return true or false if a username is already in my database.

checkname.php contains the following:

<?

$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name

m开发者_Python百科ysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['name'];


$sql="SELECT * FROM members WHERE username='".$myusername."'";


$result=mysql_query($sql);


$count=mysql_num_rows($result);


if($count >= 1){
echo "0";
}
else {
echo "1";
}

?>

I've tried hardcoding a name and running the PHP and it works fine.

For some reason though when I run Test() the first 2 alerts come through fine, showing me the username enetered, but none of the subsequent alerts appear.

Oooo and jQuery has been added in the header like so:

<script src="create/js/jquery-1.4.4.min.js" type="text/javascript" ></script>
<script src="create/js/jquery-ui-1.8.7.custom.min.js" type="text/javascript"></script>

Any help much appreciated :)


First of all, your return statements from the callback to $.post will not return from your Test() function. You should call Test with a callback function that deals with the data from the server, something like this:

function Test(username, callback) {
  $.post("checkname.php", {name: username}, callback);
}

Test(document.registration_form.username.value, function(data) {
  if(data == "0") {
    // Do something
  } else {
    // Do something else
  }
});

Brad is also correct about the comparison - you're currently assigning "0" to data. You should get the alerts though, I think, even with the other errors. Maybe you need the absolute path to the checkname.php script? E.g. "/checkname.php" (note the slash)?


Off-hand, you should be using == for comparison in javascript. A single = is an assignment, == is a comparison. So having said that, if (data = "0"){ would become if (data == "0"){.

Other than that, I don't see anything too fishy. You're allowed to use jQuery functions within "traditional" javascript function(){}'s.

Also, make sure you sanitize the input from the $_POST['name'] using something like mysql_real_escape_string.


The problem may be that the PHP script is returning a new line before or after it prints 0 or 1. So the string returned wouldn't equal "0" or "1".

Try to change it to output JSON instead.

if($count >= 1){
  $ret = 0;
}
else{
  $ret = 1;
}
echo json_encode(array('status' => $ret));

And then change your $.post to:

$.post("checkname.php", { name:  username }, function(data) {
  alert("and here");
  alert(data);

  if(data.status = 0){
    alert('That username is already in use, please choose another');
  }
  if(data.status = 1) {
    alert('That username is not already in use');
  }
}, 'json');

NOTE: The return false and return true don't do anything. You cannot return from an AJAX call.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜