Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » js: подкачка ответа страницы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
будет хорошо работать? вроде работает не плохо

ну раз работает, значит хорошо.
 


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:38 19-02-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
ну раз работает, значит хорошо.  

а как вы советовали?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 13:22 20-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
Я не советовал, я указывал на причину того, почему это не работает.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 13:24 20-02-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня тут проблема возникла...
Когда я подкачиваю такой ответ с другой страницы:
 

Код:
<?php
if(isset($_POST["settings"])) {
?>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr><td align="left" class="mein_top"><a onclick="return settingsAct('1');">Настройки сайта</a> | <a onclick="return settingsAct('2');">Настройки меню</a> | <a onclick="return settingsAct('3');">Настройки Авторизация</a></td></tr>
<tr id="settings_1"><td align="left" class="mein_info">Настройки сайта...</td></tr>
<tr id="settings_2" style="display: none;"><td align="left" class="mein_info">Настройки меню...</td></tr>
<tr id="settings_3" style="display: none;"><td align="left" class="mein_info">Настройки Авторизация...</td></tr>
 
</table>
 
<script type="text/javascript">
function settingsAct(id) {
    for(var i = 1; i <= 3; i++) {
        if(id == i) {
            document.getElementById("settings_" + i).style.display = "table-row";
        } else {
            document.getElementById("settings_" + i).style.display = "none";
        }
    }
    return false;
}
</script>
<?php exit; } ?>

 
у меня не переключаются страницы... т.е. я должен нажимать на текст, и должно меняться их значение... но пишет: "Uncaught ReferenceError: settingsAct is not defined"
 
я пробовал этот код на другой странице, и он работает...

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 16:49 22-02-2014 | Исправлено: Sutar, 16:51 22-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
Uncaught ReferenceError: settingsAct is not defined

значит
Цитата:
<script type="text/javascript">  
function settingsAct(id) {  
    for(var i = 1; i <= 3; i++) {  
        if(id == i) {  
            document.getElementById("settings_" + i).style.display = "table-row";  
        } else {  
            document.getElementById("settings_" + i).style.display = "none";  
        }  
    }  
    return false;  
}  
</script>

на странице нет. почему - сказать нельзя, видя только этот кусок кода.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:45 22-02-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
а можно как-то убрать асинхронный обмен данных?
 
т.е.
 

Код:
var http = GetHttpRequest();
 
function OpenHttpRequest(page, send, fun) {
    if(http) {
        http.open("POST", page);
        http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        http.send(send);
        http.onreadystatechange = function() {
            if(http.readyState == 4) return fun(http.responseText, 0);
        }
    }
    return fun("Error: HTTP no connection!", 1);
}
 
function ServerVote(id) {
    location_act = false;
    alert("1");
    
    OpenHttpRequest("/server.php", "vote=" + encodeURIComponent(id),
        function(res) {
            alert("2");
            document.getElementById("votenum" + id).innerHTML = res;
            return false;
        }
    );
    
    //location_act = true;
    alert("3");
    return false;
}

 
чтоб результат alert был 1, 2 и 3.
в данном случает, получается 1, 2, 3 и 2

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 20:17 06-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
неужели сложно посмотреть документацию?
 

Цитата:
http.open("POST", page, false);  


Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:44 06-10-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо.
 
А почему пишут что:
 

Цитата:
Не используйте синхронные запросы
 
Синхронные запросы применяются только в крайнем случае, когда кровь из носу необходимо дождаться ответа сервера до продолжения скрипта. В 999 случаях из 1000 можно использовать асинхронные запросы. При этом общий алгоритм такой:
 
Делаем асинхронный запрос
Рисуем анимированную картинку или просто запись типа "Loading..."
В onreadystatechange при достижении состояния 4 убираем Loading и, в зависимости от status вызываем обработку ответа или ошибки.
Кроме того, иногда полезно ставить ограничение на время запроса. Например, хочется генерировать ошибку, если запрос висит более 10 секунд.
 
Для этого сразу после send() через setTimeout ставится вызов обработчика ошибки, который очищается при получении ответа и обрывает запрос с генерацией ошибки, если истекли 10 секунд.
 
Таймаут на синхронный запрос ставить нельзя, браузер может висеть долго-долго.. А вот на асинхронный - пожалуйста.

 
почему это плохо? Я не могу понять просто... Разница вроде мала, но может на это есть другая причина? просто текст "Загрузка" можно поставить и до запроса и т.д.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:45 06-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
почему это плохо? Я не могу понять просто.

потому, что страница "подвиснет" пока не будет получен ответ от сервера.
никакой другой скрипт выполняться не будет, даже не будут кликаться ссылки (возможно)

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:48 06-10-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
а как тогда можно реализовать такие требования.
 
После нажатия на кнопку "Добавить" в JS посылается запрос в виде:
 

Код:
function Check() {
    ServerAdd = true;
    
    var ip = CheckIp(1, 0);
    var email = CheckEmail(1);
    var mod = CheckMod(1);
    var type = CheckType(1);
    var site = document.getElementById("site").value;
    var captcha = CheckСaptcha(1);
    
    if(ServerAdd == true) {
... отправляет POST для внесения запеси в БД...
}
....
 
return false;
}

 
Выделенная строчка, ждет ответа от CheckIp() которые в свою очередь, создал асинхронный запрос на файл и проверяет текст перед внесением в БД. (Текст может быть и неправильным) если в тексте будет ошибка, ServerAdd == false, и сервер не добавится... но мы не успеваем получить от запроса CheckIp() и двигаемся дальше...
 
как тут можно реализовать, чтоб только после окончания CheckIp() продолжить код?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:55 06-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
выполнять последующий код только после получения ответа от сервера, после этого

Цитата:
            if(http.readyState == 4) return fun(http.responseText, 0);  


Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:01 06-10-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
так?
 

Код:
function cart(page, post, id) {  
    if(act == 0) {  
        act = 1;  
         
        OpenHttpRequest(page, post, id, function(res) {  
            if(res == 1) {  
                    OpenHttpRequest(page, post, id, function(res) {  
                    if(res == 1) {  
                        return location.reload(true);  
                       }  
              });  
         
            }  
        });  
         
        act = 0;  
    }  
    return false;  
}

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 20:12 07-10-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
без понятия.. откуда я знаю что вы хотите сделать.
и не нужно мне это рассказывать

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:55 07-10-2014
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Есть я отправлю запрос на файл test-js.php средствами JS таким кодом:
 

Код:
http.open("POST", "test-js.php");  
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
http.send("page=" + encodeURIComponent(page_id));  
http.onreadystatechange = function()
  .....

 
Можно как-то получить ответ в %, сколько загружено?
т.е. я отправил данные, и ответ загрузился на 50%. Как это можно получить?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 17:55 05-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
тема по ajax есть отдельная
http://stackoverflow.com/questions/16690740/how-to-show-loading-status-in-percentage-for-ajax-response

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:59 05-06-2015
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 20:50 05-06-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » js: подкачка ответа страницы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru