@Angelina_Jo

Почему событие jQuery .load срабатывает несколько раз подряд?

1. По клику на волшебную кнопку я загружаю документ во фрейм #frame. Содержание документа всегда разное. Для примера можете представить, что туда загружается текущее время. Через форму отправляю запрос php скрипту и он возвращает текст.

2. Жду полной загрузки документа - $('#frame').load(function() {3...}

3. Забираю содержимое документа для дальнейшей магии -
var frameBody = $('#frame').contents().find('body').html();


4. Выполняется остальной код функции...

В первый раз функция срабатывает как надо - один раз. А если отправить форму ещё раз, функция сработает два раза подряд, как-будто фрейм загрузился два раза. Если нажать ещё раз - сработает три раза и т.д.

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

Пример кода:
frame.php

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Тест</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">

function send() {

document.forms[0].submit();

$('#frame').load(function() {

var frameBody = $('#frame').contents().find('body').html();

alert (frameBody);

});

}
</script>
</head>

<body>

<iframe id="frame" name="myFrame"></iframe>

<form action="time.php" method="post" target="myFrame">
<input type="submit" value="OK" onClick="send();">
</form>

</body>
</html>



time.php

<?

echo date('Y-m-d H:i:s');

?>

  • Вопрос задан
  • 4285 просмотров
Решения вопроса 1
@rsi
software engineer
Все очень просто, вы каждый раз нажимая на кнопку submit вызываете функцию send, которая в свою очередь каждый вызов вешает $('#frame').load.

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

Как вариант уничтожайте предыдущий обработчик перед тем как новый создать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Большая фишка втом, что браузер кеширует ответ с урла, запросов лишних не делает просто так. Столкнулся, когда делал альтернативный плеер ютуба с подгрузкой его по клику.

Пришлось создавать объект по щелчку cо всеми параметрами. Тогда браузер отправлял запрос.

1)Но вопрос в другом. Че вы там забираете и зачем вам iframe?
Если документ с чужого домена то политика запрета en.wikipedia.org/wiki/Same_origin_policy
Можно извращаться с jsonp, благо с 1.6 Jquery сделали удобно, хотя все ущербно. Надежнее как всегда проксировать запрос. но это чуть дольше - сами понимаете.

2)Если документ с вашего сервиса, то нафига iframe?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы