$ .ajax Post Request не отправляет данные POST - PullRequest
0 голосов
/ 09 декабря 2010

Я пытаюсь упорядочить свою систему входа в систему, используя ajax для обработки спины и формирования запросов к серверу.Я хочу отправить свои данные формы на страницу PHP, а затем вернуть true / false и «Недостаточно данных», если правильные параметры не были переданы.

Моя проблема в том, что мой запрос AJAX не отправляетсяданные, которые я даю для отправки.

Вот моя функция JavaScript:

function confirm_login()
{
   val_UName = document.login_form.username.value;
   val_Pwd = document.login_form.password.value;

   var result = null;
   var scriptUrl = "login_confirm.php";
   $.ajax({
     url: scriptUrl,
     type: 'post',
     data: ({username : val_UName, password : val_Pwd}),
     dataType: 'html',
     async: false,
     success: function(data) {
         result = data;
     }
   });
   result = result.split('|');
   if(result[1] == 'true')
     window.location = "index.php";
   else
     alert('Could not log you in!\n\n'+result[0]);
}

Эта функция вызывается в событии onclick кнопки отправки в форме.Теперь я использовал инструменты отладки в Chrome, и я ЗНАЮ, что val_UName и val_Pwd получают значения формы.Так что это определенно пробой между здесь и login_confirm.php

Просто для полноты, вот что происходит в login_confirm.php (я пропустил строки, которые соединяются с БД и закрывают соединение):

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

if($username == '' || $password == '')
      echo 'Not Enough Data|';

$login_query = "SELECT * FROM users WHERE u_name = '$username' AND pwd = '$password'";
$result = mysql_query($login_query);
$result_rows = mysql_num_rows($result);

if($result_rows > 0)
{
   session_start();
   $row = mysql_fetch_assoc($result);
   $_SESSION['loggedin'] = true;
   $_SESSION['uname'] = $row['u_name'];
   $_SESSION['uID'] = $row['pkid'];
   $_SESSION['email'] = $row['email'];
   $_SESSION['roleID'] = $row['fk_roleid'];
   echo 'true';
}
else
{
   echo 'false';
}

Кто-нибудь знает, что здесь происходит, или видел что-нибудь подобное раньше?

PS.Я даже пытался перейти на использование GET, и это все еще не работает ...

Ответы [ 3 ]

4 голосов
/ 09 декабря 2010
   result = result.split('|');
   if(result[1] == 'true')
     window.location = "index.php";
   else
     alert('Could not log you in!\n\n'+result[0]);

выполняется до возврата обратного вызова.

Попробуйте поместить эту логику в обратный вызов успеха или определить функцию успеха с этой логикой внутри.

2 голосов
/ 09 декабря 2010

Код под запросом ajax не будет ждать завершения запроса ajax, прежде чем он будет выполнен. Поэтому я думаю, что ваш ajax-запрос работает, но с данными ничего не происходит, потому что этот фрагмент кода уже выполнен.

Мое предложение:

function confirm_login()
{
   val_UName = document.login_form.username.value;
   val_Pwd = document.login_form.password.value;

   var scriptUrl = "login_confirm.php";
   $.ajax({
     url: scriptUrl,
     type: 'post',
     data: ({username : val_UName, password : val_Pwd}),
     dataType: 'html',
     async: false,
     success: function(data) {
         runCode(data);
     }
   });

   function runCode(var result){
      result = result.split('|');
      if(result[1] == 'true')
        window.location = "index.php";
      else
        alert('Could not log you in!\n\n'+result[0]);
      }
   }
}

Изменить: Функция не должна быть в другой функции, но я думаю, вы можете исправить это самостоятельно.

0 голосов
/ 09 декабря 2010

Не заключайте ваши данные в скобки.Достаточно только {}.

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