Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   amfphp NetConnection.Call.BadVersion (http://www.flasher.ru/forum/showthread.php?t=147609)

Jackson 09.12.2010 02:21

amfphp NetConnection.Call.BadVersion
 
Всем привет!!!
Такая проблема:
Использую amfphp для общения с сервером. PHP функция:
PHP код:

    function getRooms()
    {
        return 
mysql_query("SELECT * FROM `rooms`");
    } 

возвращает результат без ошибок.
Такая функция:
PHP код:

    function isUserReg($login,password)
    {
        
$res mysql_query("SELECT * FROM users WHERE `login` = '".$login."' AND `password`='".$password."' AND `is_active`='yes'");
        if (
mysql_num_rows($res))
        {
            
mysql_query("UPDATE users SET `is_online`='yes' WHERE `login`='".$login."' AND `password`='".$password."'");
            return 
$res;
        }
        else
        {
            return 
false;
        }
    } 

вызывает ошибку плеера:
Код:

Error #2044: Необработанный NetStatusEvent:. level=error, code=NetConnection.Call.BadVersion
        at Amf()[C:\Documents and Settings\Flash projects\project\src\libs\Amf.as:8]
        at User()[C:\Documents and Settings\Flash projects\project\src\libs\User.as:8]
        at kozel()[C:\Documents and Settings\Flash projects\project\src\libs\classes.as:9]
        at _kozel_mx_managers_SystemManager/create()
        at mx.managers::SystemManager/initializeTopLevelWindow()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:3188]
        at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:3064]
        at mx.managers::SystemManager/docFrameListener()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:2916]

В чем может быть причина? Может это особенность написания кода amfphp(нельзя делать несколько запросов в одной функции)?
к серверу обращаюсь здесь:
Код AS3:

                private function isUserReg(login:String,password:String):Boolean
                {
                        amf.toAmf('kozel_scripts.Users.isUserReg',setUserData,login,password);
                        if (!this.userData)
                        {
                                err = "Пользователь не найден";
                                return false;
                        }
                        return true;
                }
 
                private function setUserData(o:Object):void
                {
                        trace(o);
                        var obj:Object = o.serverInfo.initialData;
 
                        for (var item:* in obj)
                        {
                                trace(item);
//                                ac_list.addItem({'id':obj[item][0],'name':obj[item][1],'password':(obj[item][2]) ? 'Yes' : 'No','creator_name':obj[item][3],'create_date':obj[item][4]});
                        }
 
                }

Буду рад любой помощи

Добавлено через 10 часов 18 минут
Неужели никто не сталкивался с такой проблемой? В гугле нашел несколько тем с такой ошибкой, но нормального решения там не увидел... ХЕЛП!!!

TanaTiX 09.12.2010 12:55

Пробовал использовать флексовые классы, но как-то не пошло. Это же флекс? Вижу парочку похожих классов. Правда флекс как таковой не знаю, но делал по урокам. Переписал на pure AS3 - проблемы исчезли.
А по теме вам говорят, что не плохо бы обработать NetStatusEvent-событие. Есть хэндлер?

Jackson 09.12.2010 13:46

Да,это Flex-проект. Как можно обработать NetStatusEvent-событие? для amf использую такой класс:
Код AS3:

package
{
        import flash.net.NetConnection;
        import flash.net.Responder;
 
        public class Amf
        {
                private var nc:NetConnection = new NetConnection();
 
                public function Amf(hostname: String)
                {
                        nc.connect(hostname + "/amfphp/gateway.php");
                        nc.objectEncoding = 3;
                }
 
                public function toAmf(wht:String, cb:Function, ...args):void
                {
                        var resp:Responder = new Responder(cb, onFault);
 
                        nc.call.apply(null,[wht,resp].concat(args))
                }
 
                public function onFault(res:Object):void
                {
                        for each(var item:String in res)
                        {
                                trace(item);
                        }
                        trace("Ошибка: ",res);
                }
        }
}

В справочнике от Adobe написано:
Цитата:

"NetConnection.Call.BadVersion"-error-Пакет закодирован в неопределенном формате.
Я так думаю, что клиент не может понять ответ, который приходит с сервера... Как бы ему (и мне тоже:))) по-лучше объяснить?
TanaTiX, есть разница, flex это или pure AS3?

zuxul 09.12.2010 14:53

Поставьте charlesproxy, там вроде бы есть триалка, узнаете, что приходит Вам от сервера.

Jackson 09.12.2010 15:18

Оказалось, в скрипте php была ошибка! и, наверное, скрипт эту ошибку передавал, а плеер не мог её разобрать и выводил свою. Всем спасибо за участие!

TanaTiX 09.12.2010 16:14

Тут есть пример. pure AS3 ;)


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

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