26.02.2014, 00:18
|
Аспирант
|
|
Регистрация: 21.05.2013
Сообщений: 42
|
|
ajax запрос небольшая проблемка
есть index.php
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js">
</script>
<form id="form_id1" method="post" action="">
<input type="hidden" name="name" id="ip_tv1" value="vasya">
</form>
<script type="text/javascript">
window.setInterval('AjaxFormRequest1(\'ajaxf\', \'form_id1\', \'1.php\');', 2000);
function AjaxFormRequest1(result_id,form_id,url) {
jQuery.ajax({
url: url, //Адрес подгружаемой страницы
type: "POST", //Тип запроса
dataType: "html", //Тип данных
data: jQuery("#"+form_id).serialize(),
success: function(response) { //Если все нормально
document.getElementById(result_id).innerHTML = response;
},
error: function(response) { //Если ошибка
document.getElementById(result_id).innerHTML = "Ошибка при отправке формы";
}
});
}
</script>
<div id="ajaxf"></div>
есть 1.php
<?php
if($_POST['name'] == 'vasya'){echo 'Все работает отлично';}
?>
<script>
alert("Privet");
</script>
Открываю страницу и через 2 секунды получаю надпись:
"Все работает отлично" но куда дела ALERT??? Я хочу так же что бы вылетал алерт и писал "Privet"
Подскажите в чем проблема и как сделать так что бы работало?
|
|
26.02.2014, 00:23
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Все дело в этой строчке:
Сообщение от ninzzo
|
document.getElementById(result_id).innerHTML = response
|
Скрипт, вставленный через innerHTML, не сработает.
Почему ты не поместишь свой алерт прямо в index.php?
Сообщение от ninzzo
|
setInterval('AjaxFormRequest1(\'ajaxf\', \'form_id1\', \'1.php\');', 2000);
|
Надо так писать:
setInterval(function(){
AjaxFormRequest1('ajaxf', 'form_id1', '1.php');
}, 2000);
__________________
В личку только с интересными предложениями
|
|
26.02.2014, 02:05
|
Аспирант
|
|
Регистрация: 21.05.2013
Сообщений: 42
|
|
Цитата:
|
Почему ты не поместишь свой алерт прямо в index.php?
|
потому что дело не в этом alert а в других мега сложных js скриптах. Я хочу узнать корень проблемы.
Цитата:
|
Скрипт, вставленный через innerHTML, не сработает.
|
подскажите как сделать что бы сработало.
вообщем задача вставить в <div id="more">СЮДА</div> все содержимое другой страницы. Это реально?
Последний раз редактировалось ninzzo, 26.02.2014 в 02:15.
|
|
26.02.2014, 12:18
|
|
Профессор
|
|
Регистрация: 02.08.2012
Сообщений: 293
|
|
не рекомендую использовать setInterval с малым периодом вызова для аякс-запросов.
Может сложиться такая ситуация, когда ответ еще не пришел, а сетИнтервал лупит следующий запрос и получится каша.
|
|
26.02.2014, 13:53
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,206
|
|
Сообщение от deivan
|
Может сложиться такая ситуация, когда ответ еще не пришел, а сетИнтервал лупит следующий запрос и получится каша.
|
Вывод - не делай кашу, она и не получится
Т.ч. "сетИнтервал" не будет виноват...
|
|
26.02.2014, 15:40
|
|
Профессор
|
|
Регистрация: 02.08.2012
Сообщений: 293
|
|
Are you sure?..
1. Стартует скрипт, пошел запрос №1 с данными Д1 к внешнепу скрипту.
2. В это время где-то на магистральных роутерах случился негаразд и запрос начал блуждать.
3. Не получив ответа, сет интервал бьет запрос №2 с данными Д2, которые категорично отличаются от Д1 и требуют смены страницы
4. Приходит ответ от запроса №1, но он не знает, что данные Д2 изменили ситуацию в корне, поэтому скрипт выполняет действие, которое выполнять уже не нужно.
5. получаем неверное поведение приложения, и как следствие - коррапт данныз базы, левый редирект и т.д.
|
|
26.02.2014, 15:43
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,206
|
|
deivan, не нужно придумывать фигню. Она и так получится. Ты придумывай варианты при которых фигня никогда не получится.
И нечего на методы пенять...
|
|
26.02.2014, 16:00
|
|
Профессор
|
|
Регистрация: 02.08.2012
Сообщений: 293
|
|
Как бэ, ничего не придумываю. Это суровые реалии асинхронного программирования.
Если передаваемые данные критичны, то необходимо запросы обертывать в сет-таймаут с коллбэком, который в свою очередь по завершении запроса породит следующий тайм-аут.. вот это и есть вариант, когда фигня действительно не получится.
Ну, а если скрипт нужен для какой-то информационной требухи типа количества юзеров он-лайн -- то да, и сет-интервал сойдет.
|
|
26.02.2014, 16:03
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,206
|
|
Сообщение от deivan
|
Как бэ, ничего не придумываю.
|
Любой алгоритм придумывает разработчик. Вот если он придумает фигню - тогда ему ничего не остается, как пенять на "суровые реалии асинхронного программирования".
И при написании фигни б Ольшие таймауты в setInterval() тебя не спасут...
|
|
26.02.2014, 20:17
|
Аспирант
|
|
Регистрация: 21.05.2013
Сообщений: 42
|
|
Ребят, не нужно спорить использовать или не использовать метод. Меня интересует как на моей странице 1 вывести страницу 2 каждые несколько секунд. СО ВСЕМИ JS !!!!
Хелп!!! KSA помоги ты же можешь я знаю)
|
|
|
|