Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   jquery $('#id').ready (https://javascript.ru/forum/events/4242-jquery-%24-%27-id%27-ready.html)

JAre 05.07.2009 07:16

jquery $('#id').ready
 
Я использую вот такую конструкцию:
$('#' + id).submit();

$('#ifrTransp').ready(function () {

     $.getJSON("http://thelongesttest.appspot.com/1.html?id=" + id + "&callback=?",

   
          function(data) {

              alert(decodeURI( data.id));

          });

});


Для передачи данных на сервер через фрейм "ifrTransp'".

function(data) {

              alert(decodeURI( data.id));

          });


В будущем должно проверять получил ли сервер данные, не было ли ошибок. То есть мне нужно создать этот запрос сразу после передачи данных через ифрейм. Но у меня такое чувство, что этот ready срабатывает раньше чем форма уходит на сервер.

Я прав? :blink:

JAre 05.07.2009 08:41

И еще это, мне ready применять к ифрейму или странице?

x-yuri 06.07.2009 18:21

дело в том, что ready вешает событие на document (текущий)
что это за iframe? Почему бы в нем не прописать ready?

JAre 06.07.2009 19:23

Что-то в этом духе:
<iframe name="qtroll_ifrTransp" id="qtroll_ifrTransp" width="100%" height="300"></iframe>
<form name="qtroll_question" enctype="application/x-www-form-urlencoded" method="post" action="http://thelongesttest.appspot.com/cpanel/" id='qtroll_questionFrmId' target="qtroll_ifrTransp">  <!-- {qtroll_questionFrm} -->
</form>


отсылаю так:

function qtroll_sbm(id) {
		
$('#' + id + ' > #qtroll_sbmBtn').attr('style', 'color:#000');
$('#' + id + ' > #qtroll_sbmBtn').attr('value', 'sending...');

var seed = hex_md5( new Date() );

$('#' + id + ' > #qtroll_querySeed').attr('value', seed);
	
$('#' + id).submit();

$('#qtroll_ifrTransp').ready(function () {

     $.getJSON("http://thelongesttest.appspot.com/cpanel/?id=" + encodeURI(seed) + "&callback=?",

   
          function(data) {

              alert(seed + "  " + decodeURI(data.seed));

			  
			  if ( ('["' + seed + '"]') == decodeURI(data.seed) ) { 
			  
			  $('#' + id + ' > #qtroll_sbmBtn').attr('style', 'color:#060');
			  $('#' + id + ' > #qtroll_sbmBtn').attr('value', 'ok!');
				  
				  } 
			 else {
			  $('#' + id + ' > #qtroll_sbmBtn').attr('style', 'color:#F00');
			  $('#' + id + ' > #qtroll_sbmBtn').attr('value', 'error!');
			 }

          });

});

}


Это черновой вариант.

Идея такова:

Запекаю в невидимое поле формы хеш даты. Отправляю форму через ифрейм транспорт на удаленный сервер( не тот откуда скрипт грузится) Всё это дело пакуется в бд.

Как только транзакция завершена - посылаю на тот же сервер ГЕТ запрос, который содержит тот же сиид( дату публикации формы) Если сииды совпадают - значит, по идее, всё произошло нормально.

Планирую делать хеш не времени а сериализированной формы, так логичнее...

Хелп ме! де мне утыкнуть редю :)

x-yuri 06.07.2009 19:54

Цитата:

де мне утыкнуть редю
внутри iframe можно?

JAre 06.07.2009 20:25

Можно. Как это событие называется, что бы я его добавил? Раз $('#qtroll_ifrTransp').ready не то, что нужно..

А что если $('#qtroll_ifrTransp').load ? Или тоже не вариант ?

JAre 06.07.2009 20:56

Ухты! А .load как раз то, что нужно делает. Странно, что в спеках по jquery не видел его. Видимо, потому-что он стандартный метод.

x-yuri 07.07.2009 22:33

не знаю, как тебе $('#qtroll_ifrTransp').load помог

а по поводу в iframe: переносишь $('#qtroll_ifrTransp').ready в iframe, а для обращения ко внешнему документу используешь top.document в качестве контекста для $

UPD: уже понял о каком load идет речь (в jQuery совпадает название функций для назначения обработчика события load и для загрузки информации через ajax)


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