Проблема с использованием поста jQuery внутри не jQuery функции - PullRequest
0 голосов
/ 02 марта 2011

У меня есть следующий скрипт внутри HTML-страницы:

<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>

Я пытаюсь заставить функциональный тест вернуть true или false, если имя пользователя уже есть в моей базе данных.

checkname.php содержит следующее:

<?

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

mysql_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";
}

?>

Я пробовал жестко кодировать имя и запускать PHP, и он работает нормально.

По какой-то причине, хотя я запускаю Test (),первые 2 оповещения проходят нормально, показывая, что имя пользователя введено, но ни одно из последующих оповещений не появляется.

Oooo и jQuery были добавлены в заголовок следующим образом:

<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>

Любая помощьвысоко ценится:)

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

Прежде всего, ваши операторы возврата из обратного вызова $ .post будут не возвращаться из вашей функции Test (). Вы должны вызвать Test с функцией обратного вызова, которая обрабатывает данные с сервера, примерно так:

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
  }
});

Брэд также прав насчет сравнения - вы в настоящее время назначаете «0» для данных. Вы должны получать предупреждения, хотя, я думаю, даже с другими ошибками. Может быть, вам нужен абсолютный путь к скрипту checkname.php? Например. "/checkname.php" (обратите внимание на косую черту)?

2 голосов
/ 02 марта 2011

Вне руки, вы должны использовать == для сравнения в JavaScript.Одиночный = - это присвоение, == - это сравнение.Сказав это, if (data = "0"){ станет if (data == "0"){.

Кроме этого, я не вижу ничего слишком подозрительного.Вам разрешено использовать функции jQuery в «традиционной» функции javascript () {} {}.

Кроме того, убедитесь, что вы очищаете входные данные от $_POST['name'], используя что-то вроде mysql_real_escape_string.

0 голосов
/ 02 марта 2011

Возможно, проблема в том, что PHP-скрипт возвращает новую строку до или после печати 0 или 1. Таким образом, возвращаемая строка не будет равна "0" или "1".

Попробуйте вместо этого изменить его на вывод JSON.

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

А затем измените свой $.post на:

$.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');

ПРИМЕЧАНИЕ: return false и return true ничего не делают. Вы не можете вернуться с AJAX-звонка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...