Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   XmlHttpRequest (https://javascript.ru/forum/server/30511-xmlhttprequest.html)

Hekumok 07.08.2012 01:48

XmlHttpRequest
 
Объясните, позязя, что я делаю не так в этом коде:
<html><head><title>Регистрация</title>
<meta http-equiv="Content-Type" Content="text/html; Charset=Windows-1251">
<script>
function getXmlHttp() {
var xmlhttp ;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP") ;
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP") ;
} catch (E) {
xmlhttp = false ;
} ;
} ;
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest() ;
} ;
return xmlhttp ;
} ;
function registration() {
var xmlhttp = getXmlHttp() ;
xmlhttp.open("POST", "save_user.php", true) ;
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState != 4) {
document.write('Loading...') ;
} else {
if (xmlhttp.status == 200) document.write(xmlhttp.responseText) ;
} ;
} ;

var params = 'name='+encodeURIComponent(name)+'&password='+encodeURIComponent(password) ;
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded') ;
xmlhttp.send(params) ;
} ;
</script>
</head><body>
<h2>Регистрация</h2>
<form method="post" enctype="application/x-www-form-urlencoded" onsubmit="registration()"><p>
<label>Ваш логин<br></label>
<input name="login" type="text" size="15" maxlength="15"></p>
<p><label>Ваш пароль:<br></label>
<input name="password" type="password" size="15" maxlength="15"></p>
<p>
<input type="submit" name="submit" value="Зарегистрироваться">
</p></form></body></html>

Когда жму на сабмит, просто появляется значок загрузки вверху браузера, и нифига не происходит...
Зы: нужно содержание странички save_user.php?

devote 07.08.2012 02:13

ужос.. все ни так делаете.. поддерживать ИЕ6 нет смысла, статус нужно проверять не только 200, но и другие тоже.. Если браузер берет страницу например из кеша, то и статус вернет 304 вроде.. точно не помню.. но не 200 точно.

Hekumok 07.08.2012 02:21

Цитата:

Сообщение от devote (Сообщение 195166)
ужос.. все ни так делаете..

читал всё тут и делал, как там написано...
Цитата:

Сообщение от devote (Сообщение 195166)
поддерживать ИЕ6 нет смысла

Я его и "не поддерживаю" - мне на него срать, как и на всех остальных ишаков, просто делал, как написано на том сайте (см. выше)
Цитата:

Сообщение от devote (Сообщение 195166)
статус нужно проверять не только 200, но и другие тоже.. Если браузер берет страницу например из кеша, то и статус вернет 304 вроде.. точно не помню.. но не 200 точно.

То есть
if (xmlhttp.status == 200 || xmlhttp.status == 304) ...
?!

Deff 07.08.2012 02:25

devote,
Ксать я проверял - не обнаружил я кода 304 в ответе ти мне говорил -(хотя у меня доступа к серву нет, но тестил и картинки (уж явно должны кешироваться) -

devote 07.08.2012 02:29

Hekumok,
я уже не однократно приводил пример того как нужно делать запросы аякс, без всяких там ишаков, например тут

devote 07.08.2012 02:30

Цитата:

Сообщение от Deff
не обнаружил я кода 304 в ответе ти мне говорил

ну какраз таки на картинка оно реже всего.. тут надо на простых GET запросах тестить

Deff 07.08.2012 02:31

:) У мну мой код(из той темы) работает везде - конфликтов, не смотря на замечания - не наблюдаю( тестил спецом

Deff 07.08.2012 02:32

Цитата:

Сообщение от devote
ут надо на простых GET запросах тестить

devote,
Хм... я просто не наю где тестить - у меня нет кешированных get

Hekumok 07.08.2012 02:35

Цитата:

Сообщение от devote (Сообщение 195173)
Hekumok,
я уже не однократно приводил пример того как нужно делать запросы аякс, без всяких там ишаков, например тут

Ясно, спасибо, теперь буду писать так, и то есть вот этого
function getXmlHttp() {
var xmlhttp ;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP") ;
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP") ;
} catch (E) {
xmlhttp = false ;
} ;
} ;
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest() ;
} ;
return xmlhttp ;
} ;

вабще не нужно?
И да, это ведь ничего не изменит в плане работы скрипта - работать-то он ведь всё равно не будет

devote 07.08.2012 02:37

Цитата:

Сообщение от Deff
У мну мой код(из той темы) работает везде - конфликтов, не смотря на замечания - не наблюдаю( тестил спецом

ну не знаю как был произведен тест, но статусы такие:

200 OK
304 Not Modified

все что в диапазоне двухсот, являются корректными запросами, с небольшими тонкостями которые может прислать сервер. Например статус 202 "Accepted", 203 "Non-Authoritative Information" и т.д.

В опере откройте отладчик, в разделе сеть можно увидеть какие статусы у запросов.

devote 07.08.2012 02:38

Цитата:

Сообщение от Hekumok
вабще не нужно?

да этого говна не нужно, оно нужно было для ИЕ5+

Цитата:

Сообщение от Hekumok
И да, это ведь ничего не изменит в плане работы скрипта - работать-то он ведь всё равно не будет

конечно будет

Hekumok 07.08.2012 02:40

Цитата:

Сообщение от devote (Сообщение 195180)
да этого говна не нужно, оно нужно было для ИЕ5+

Ясно
Цитата:

Сообщение от devote (Сообщение 195180)
конечно будет

Ок) сейчас проверим

devote 07.08.2012 02:41

все эти статусы являются корректными:
200  "OK"
201  "Created"
202  "Accepted"
203  "Non-Authoritative Information"
204  "No Content"
205  "Reset Content"
206  "Partial Content"
304  "Not Modified"

Deff 07.08.2012 02:43

devote,
Воть тут на сайте проскакивает 304 в закрытых темах:-E

Hekumok 07.08.2012 02:45

Блин, теперь тупо перезагружает страницу >.<

devote 07.08.2012 02:46

Цитата:

Сообщение от Hekumok
Блин, теперь тупо перезагружает страницу >.<

значит ошибку где-то допустил.. смотри консоль ошибок

Hekumok 07.08.2012 02:52

Цитата:

Сообщение от devote (Сообщение 195188)
значит ошибку где-то допустил.. смотри консоль ошибок

B данный момент не дома и сижу со смартфона - просмотреть консоль ошибок не предоставляется возможным >.<

devote 07.08.2012 02:56

<!DOCTYPE html>
<html>
   <head>
      <title>Регистрация</title>
      <meta http-equiv="Content-Type" Content="text/html; Charset=Windows-1251">
      <script type="text/javascript">
         function registration() {

            var name = document.getElementsByName( 'login' )[0].value;
            var password = document.getElementsByName( 'password' )[0].value;

            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open( "POST", "save_user.php", true );
            xmlhttp.onreadystatechange = function(){
                if ( xmlhttp.readyState == 4 ) {
                    if ( xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status === 304 ) {
                        document.body.appendChild( document.createTextNode( xmlhttp.responseText ) ) ;
                    }
                } else {
                    document.body.appendChild(document.createTextNode( 'Loading...' ) ) ;
                }
             }
             var params = 'name='+encodeURIComponent( name )+'&password='+encodeURIComponent( password );
             xmlhttp.setRequestHeader( 'Content-Type','application/x-www-form-urlencoded' );
             xmlhttp.send( params );

             return false;
         }
      </script>
   </head>
   <body>
      <h2>Регистрация</h2>
      <form method="post" enctype="application/x-www-form-urlencoded" onsubmit="return registration()">
         <p>
            <label>Ваш логин<br></label>
            <input name="login" type="text" size="15" maxlength="15">
         </p>
         <p>
            <label>Ваш пароль:<br></label>
            <input name="password" type="password" size="15" maxlength="15">
         </p>
         <p>
            <input type="submit" name="submit" value="Зарегистрироваться">
         </p>
      </form>
   </body>
</html>

devote 07.08.2012 03:01

подправил код, у тебя переменные name и password ни откуда не брались

Hekumok 07.08.2012 03:08

devote, спасибо))) ток мне терь придется с кодировками повозиться, а то мне крякозябры выводит

devote 07.08.2012 03:11

Цитата:

Сообщение от Hekumok
а то мне крякозябры выводит

ну дык на сервере укажи нужную кодировку, или файлы переведи в ту с которой работает сервер.

Hekumok 07.08.2012 03:13

Цитата:

Сообщение от devote (Сообщение 195196)
ну дык на сервере укажи нужную кодировку, или файлы переведи в ту с которой работает сервер.

:blink: a как енто сделать?

devote 07.08.2012 03:19

ну какую ты там юзаешь, прямо в начале файла после открывающего тега PHP пиши:
header( "Content-type: text/html; charset=utf-8" );
или
header( "Content-type: text/html; charset=windows-1251" );

Hekumok 07.08.2012 03:28

devote, всё равно...блин, чо за фигня?!

devote 07.08.2012 03:33

ну что то ты делаешь не так.. попробуй создать файл .htaccess в корне сайта и пропиши в нем строчку:
AddDefaultCharset UTF-8
ну или другую кодировку

Hekumok 07.08.2012 03:41

devote, огромное спасибо - это помогло =) только почему пишет: "Вы ввели не всю информацию, вернитесь назад и заполните все поля!" - хотя я и логин и пароль ввел?

devote 07.08.2012 03:42

Цитата:

Сообщение от Hekumok
хотя я и логин и пароль ввел?

ну это уже видимо в коде PHP у тебя что-то не так.

Hekumok 07.08.2012 03:56

devote, огромное вам спасибо - я нашел ошибку...и извините, я вас, наверно, уже достал своими глупыми вопросами, но есть еще один - у мну в бд при регистрации записывается id - так вот, когда я щас тестил этот код, то в бд записались 3 "пользователя" с айдишниками 1, 2 и 3, и если я сейчас очищу бд, то ведь при следующей регистрации в бд уже будет записан пользователь с id 4, а можно ли сделать, чтоб айдишники стали начисляться заново, то есть с 1?

devote 07.08.2012 04:10

ALTER TABLE `table` AUTO_INCREMENT = 7236
где число 7236 номер индекса который получит новая запись.

Hekumok 07.08.2012 04:17

devote, наигромнейшее вам спасибо, вы столько времени на меня потратили - даже не знаю, чтобы я без вас делал! Еще раз - спасибо


Часовой пояс GMT +3, время: 12:21.