Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.09.2008, 04:03
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 1  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
По умолчанию проверка "Капчи" - задержка в коде

Есть у меня необходимость проверки капчи:

проверяю я так
Код:
function isDataCorrect():Boolean
{
	if (isCaptchaCorrect(_root.tCapcha.text) == false)
	{
		_root.MessageBox("ОШИБКА!!!", "Вы не правильно ввели код с изображения");
		getCaptcha(_root.cldrCaptcha);
		return false;
	}
        ....
        return true;
}
а вот функция проверки именно капчи
Код:
function isCaptchaCorrect(sCode:String):Boolean
{
	var oResponceData:Object = { };
	
	var sSend:String = '<?xml version="1.0" encoding="UTF-8"?><envelop type="captcha" session="' + $strSessionId + '" captcha_code="' + sCode + '" />';
	
	var xmlSend:XML = new XML(sSend);
	
	XMLParser.sendAndLoad(xmlSend, server_url, fnOnLoad, oResponceData, false, true);
	
	function fnOnLoad($bSuccess:Boolean, oResponceData:Object, $xmlOriginal:XML):Void
	{
		if ($bSsuccess) {
			echo("Капча: |>" + sCode + " - " + oResponceData.section[0].item[1].value);
			echo($xmlOriginal);
		} else {
			echo("Connection error");
		}
	}
	
	// TODO: вот тутачки нужно вставить задержку
	
	if (oResponceData.section[0].item[1].value == "correct") {
		echo("Капча: ||>" + sCode + " - " + oResponceData.section[0].item[1].value);
		return true;
	} else {
		echo("Капча: |||>" + sCode + " - " + oResponceData.section[0].item[1].value);
		return false;
	}
}
проблема в том что я проверяю oResponceData.section[0].item[1].value
тогда когда это значение еще не определено (не пришло с сервера),
как правильно в данном случае выдержать паузу перед этим фрагментом кода

или как вернуть значение функции isCaptchaCorrect(...) из fnOnLoad(...);

или какие вообще алгоритмы используются в подобных проверках
подскажите, пожалуйста....

З.Ы. В поиске рылся ничего подходящего для себя в данном случае
с исп. setInterval или setTimeout не нашел (или не сообразил)
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 26.09.2008 в 04:40.
Старый 26.09.2008, 11:53
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Аниснхронность в данном случает подразумевает проверку isCaptchaCorrect после получения ответа от сервера. Никаких задержек вводить не надо =).
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 26.09.2008, 11:58
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 3  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Это понятно, а как определить что ответ уже получен вне функции fnOnLoad ?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 26.09.2008, 13:49
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 4  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
http://www.flasher.ru/forum/showthread.php?t=112398 посмотрите тут, возможно это вам поможет.

Старый 26.09.2008, 14:26
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 5  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
спасибо, но это не к моему случаю...

неужели никто и никогда сталкивался с такой проблемой....?

Можно и по-другому:
Возможно ли вернуть значение родительской функции из дочерней,
т.е если функции вложенные (хотя где то попадалось что вложенные функции это и не лучшая практика), то вернуть return для родительской функции из вложенной?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 27.09.2008, 02:58
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 6  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Неужели у местных ГУРУ нет никаких мыслей по данному вопросу?
Ситуация вроде очень распространенная когда нужно определить пришел ли ответ от сервера или нет после запроса...
Никто не подскажет в каком направлении копать для решения проблемы?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 27.09.2008, 03:24
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 7  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
менять структуру. Синхронно отослать и получить ответ в одном блоке кода нельзя. точнее не возможно во флэше

Старый 27.09.2008, 03:32
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 8  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
это я уже понял, вот только не красиво и не читабельно получается что приходится делать кучу функций которые запускаются цепочкой и одна передает параметры другой, что б в конце концов дойти до того участка кода где мне нужно проверить значения полученные от сервера....

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

Если никто больше опытом поделится не хочет ,
то вопрос можно считать закрытым...

Всем спасибо.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 02.10.2008, 18:39
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 9  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Послал запрос... Ждеш ответа. Ответ прийдет всегда. Если undefined то твой сервер не доступен или ничего не ответил... Незнаю о каких ты цепочках говориш....

Код:
import utils.Timer;

class Systems.Net.MXMLSocket extends LoadVars{
	public var onError:Function;
	public var onRecive:Function;
	
	private var query:String = '';
	
	private var server:String;
	
	private var bLoaded:Number = 0;
	
	private var timeOutTimer:Timer;
	
	public function MXMLSocket(_server:String, timeOut:Number ){
		this.server = _server;

		timeOutTimer = undefined;

		if ( timeOut > 0 )
			initTimeOutTimer( timeOut );
		
	}
	
	public function get bytesLoad():Number{
		return bLoaded;
	}
	
	private function onData(data:String):Void {
		
		this.stopTimeOutTimer();
		
		var bytes:Number = this.getBytesTotal();
		bLoaded += bytes;
		if(data==undefined){
			onErrorHandler("mxml server dont response on " + this.server );
			return;
		}
		onRecive(data);
	}
	
	public function send(str:String):Void
	{
		query = str;

		this.postData(this);
	}
	
	
	public function sendObj(obj:Object):Void{
		var sendObject:LoadVars = new LoadVars();
		for(var vr:String in obj){
			sendObject[vr] = obj[vr];
		}
		
		//sendObject.onData = Delegate.create(MXMLSOcket, onData);
		
		//sendObject.sendAndLoad(server, this, 'POST');
		
		//this.checkTimeOut();
		
		postData( sendObject );
		
	}
	
	private function postData( sendObject:LoadVars ):Void
	{
		sendObject.sendAndLoad(server, this, 'POST');
		
		if ( this.isTimeOutEnable() )
		{
			this.startTimeOutChecker();
		}		
	}
	
	
	private function onErrorHandler(reason:String):Void
	{
		this.stopTimeOutTimer();
		this.onError( reason );
	}
	
	
	/// --- timeout
	
	private function initTimeOutTimer( timeOut:Number ):Void
	{
		timeOutTimer = new Timer( timeOut , false );
		timeOutTimer.addEventListener( Timer.TICK_EVENT , Delegate.create(this, onTimeOutHandler) );
	}	
	
	
	private function onTimeOutHandler(event:Object):Void
	{
		//this.stopTimeOutTimer();
		this.onErrorHandler( "mxml server "+ this.server +" dont response, time out " + this.timeOutTimer.durationSeconds );
	}
	
	private function isTimeOutEnable():Boolean
	{
		return this.timeOutTimer != undefined;
	}
	
	private function startTimeOutChecker():Void
	{
		this.timeOutTimer.turnOn();
	}
	
	private function resetTimeOutTimer():Void
	{
		this.timeOutTimer.reset();
	}
	
	private function stopTimeOutTimer():Void
	{
		this.timeOutTimer.turnOff();
	}
	
	/// timeout --- 
}
Код:
import mx.events.EventDispatcher;

class utils.Timer extends mx.events.EventDispatcher
{
	
	public static var TICK_EVENT:String = "TICK_EVENT";
	private static var SECONDE:Number = 1000;
	
	var interValId:Number;
	
	var _duration:Number;
	
	public function Timer( duration:Number )
	{
		super();
		this._duration = duration*SECONDE;
		this.interValId = undefined;
		
	}
	
	
	
	
	public function turnOn():Void
	{
		
		//trace( "tutils.Timer.urnOn " + this.durationMillSec );
		
		if ( enable )
			this.turnOff();
		
		this.interValId = setInterval( Delegate.create( this , onIntervalHandler ) , this.durationMillSec );
		
	}
	
	public function turnOff():Void
	{
		
		this.clearInternalInterval();
	}
	
	
	public function get enable():Boolean
	{
		return interValId != undefined;
	}
	
	public function set enable( val:Boolean ):Void
	{
		if ( val == this.enable )
		{
			return;
		}
		
		if ( val )
			turnOn();
		else
			turnOff();
	}
	
	public function reset():Void
	{
		this.turnOff();
		this.turnOn();
	}
		
	public function get durationMillSec():Number
	{
		return this._duration;
	}
	
	public function set durationMillSec(arg:Number):Void
	{
		this._duration = arg;
		reset();
	}
	
	public function get durationSeconds():Number
	{
		return durationMillSec/SECONDE;
	}
	
	public function set durationSeconds(arg:Number):Void
	{
		this.durationMillSec = arg*SECONDE;
	}
	
	
	private function onIntervalHandler():Void
	{
		this.dispatchEvent( { type:TICK_EVENT } );
	}
	
	private function clearInternalInterval():Void
	{
		
		if ( !this.enable )
			return;
		
		clearInterval( this.interValId );
		this.interValId = undefined;
		
	}
	
	

	
	
}
Часть кода подвырезана...

У меня лично делегат на onRecive передает строку далее парсеру...

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:46.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.