Почему мой сценарий AJAX не работает? - PullRequest
0 голосов
/ 14 ноября 2009

Я пытаюсь получить приведенный ниже код для вызова PHP-файла и показать возвращенные данные. В Firefox предупреждение отображается пустым, а в IE иногда отображается, но в основном ничего. PHP-скрипт представляет собой простой echo "hello";.

Сценарий

function make_request()
{
  try
  {
    // Firefox, Opera 8.0+, Safari
    httpxml=new XMLHttpRequest();
  }
  catch (e)
  {
    // Internet Explorer
    try
    {
      httpxml=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        httpxml=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        alert("Your browser does not support AJAX!");
        return false;
      }
    }
  }
}


function check_login(username, password)
{
  var httpRequest;
  make_request()

  var parameters = 'username=' + username.value + '&password=' + password.value;
  httpxml.onreadystatechange = stateck;
  httpxml.open('POST', 'login.php', true);
  httpxml.setRequestHeader('Content-Type', "application/x-www-form-urlencoded");
  httpxml.setRequestHeader('Content-Length', parameters.length);
  httpxml.send(parameters);

  function stateck() 
  {
    if(httpxml.readyState==4)
    {
      alert(httpxml.responseText);  
    }
  }
}

Разметка

<table class="form" id="form" cellpadding="10" >
  <form id="signup_form" name="form" method="post" />
  <tr>
    <td>Username</td>
    <td><input type="text" name="username" id="username" size="26" /></td>
  </tr>
  <tr>
    <td>Password</td>
    <td><input type="password" name="password" id="password" size="26"/></td>
  </tr>

    <td>
      <input type="submit" name="button" id="button" value="Submit" onClick="check_login(username, password);"/>
    </td>
  </form>
</table>
</div>

Спасибо

1 Ответ

2 голосов
/ 14 ноября 2009

Несколько замечаний, которые я не смог уместить в комментарии (некоторые из них не должны влиять на успешность вашего вызова XMLHttpRequest; другие могут - поэтому исправьте все из их):

Сценарий

Ничто не проверяет возвращаемое значение make_request () , поэтому return false; является бессмысленным (просто ... возврат). Почему бы не сделать httpxml локальной переменной вместо неявной глобальной и вернуть ее? Затем используйте возвращаемое значение, чтобы указать вызывающей стороне, успешно ли выполнена функция ...

Локальная переменная httpRequest в check_login () никогда не используется. Возможно, вы намеревались присвоить ему возвращаемое значение make_request () (и ... иметь make_request () на самом деле вернуть что-то полезное?)

Вы на самом деле не кодируете URL значения имя пользователя или пароль . (Пропустите их через encodeURIComponent(), чтобы выполнить это легко)

Вам не нужно явно устанавливать заголовок Content-Length. (И если вы ошибетесь, это может легко привести к сбою запроса)

И самая страшная ошибка скрипта: вы не отменяете поведение по умолчанию для кнопки отправки. Верните false из check_login () и измените ваш обработчик событий на onclick="return check_login(username, password);

Разметка

Вы сделали тег <form> самозакрывающимся (<form ... />). И включил закрывающий тег </form>. Маловероятно, что вы этого хотите (и еще менее вероятно, что кросс-браузер будет работать надежно)

Ваша последняя ячейка (<td>) определена вне любой строки (<tr>).

Вы закрываете <div>, которое никогда не открывалось.

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