Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   ajax запрос небольшая проблемка (https://javascript.ru/forum/events/45371-ajax-zapros-nebolshaya-problemka.html)

ninzzo 26.02.2014 00:18

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"

Подскажите в чем проблема и как сделать так что бы работало?

danik.js 26.02.2014 00:23

Все дело в этой строчке:
Цитата:

Сообщение от 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);

ninzzo 26.02.2014 02:05

Цитата:

Почему ты не поместишь свой алерт прямо в index.php?
потому что дело не в этом alert а в других мега сложных js скриптах. Я хочу узнать корень проблемы.

Цитата:

Скрипт, вставленный через innerHTML, не сработает.
подскажите как сделать что бы сработало.


вообщем задача вставить в <div id="more">СЮДА</div> все содержимое другой страницы. Это реально?

deivan 26.02.2014 12:18

не рекомендую использовать setInterval с малым периодом вызова для аякс-запросов.
Может сложиться такая ситуация, когда ответ еще не пришел, а сетИнтервал лупит следующий запрос и получится каша.

ksa 26.02.2014 13:53

Цитата:

Сообщение от deivan
Может сложиться такая ситуация, когда ответ еще не пришел, а сетИнтервал лупит следующий запрос и получится каша.

Вывод - не делай кашу, она и не получится ;)
Т.ч. "сетИнтервал" не будет виноват... :D

deivan 26.02.2014 15:40

Are you sure?..

1. Стартует скрипт, пошел запрос №1 с данными Д1 к внешнепу скрипту.
2. В это время где-то на магистральных роутерах случился негаразд и запрос начал блуждать.
3. Не получив ответа, сет интервал бьет запрос №2 с данными Д2, которые категорично отличаются от Д1 и требуют смены страницы
4. Приходит ответ от запроса №1, но он не знает, что данные Д2 изменили ситуацию в корне, поэтому скрипт выполняет действие, которое выполнять уже не нужно.
5. получаем неверное поведение приложения, и как следствие - коррапт данныз базы, левый редирект и т.д.

ksa 26.02.2014 15:43

deivan, не нужно придумывать фигню. Она и так получится. Ты придумывай варианты при которых фигня никогда не получится. ;)
И нечего на методы пенять...

deivan 26.02.2014 16:00

Как бэ, ничего не придумываю. Это суровые реалии асинхронного программирования.

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

Ну, а если скрипт нужен для какой-то информационной требухи типа количества юзеров он-лайн -- то да, и сет-интервал сойдет.

ksa 26.02.2014 16:03

Цитата:

Сообщение от deivan
Как бэ, ничего не придумываю.

Любой алгоритм придумывает разработчик. Вот если он придумает фигню - тогда ему ничего не остается, как пенять на "суровые реалии асинхронного программирования". :D

И при написании фигни бОльшие таймауты в setInterval() тебя не спасут... ;)

ninzzo 26.02.2014 20:17

Ребят, не нужно спорить использовать или не использовать метод. Меня интересует как на моей странице 1 вывести страницу 2 каждые несколько секунд. СО ВСЕМИ JS !!!!
Хелп!!! KSA помоги ты же можешь я знаю)

ksa 26.02.2014 22:06

ninzzo, так тебе же уже написали
Цитата:

Сообщение от danik.js
Скрипт, вставленный через innerHTML, не сработает.

Скрипты нужно подключать как скрипты...
http://www.sql.ru/forum/878979/dinam...chenie-skripta


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