Возможно ли отправить запрос в Google и Yahoo API одновременно? - PullRequest
0 голосов
/ 30 мая 2009

В своем проекте я использовал Google AdWords API, а также Yahoo API. Я хочу отправить запрос двум API одновременно, используя flex.

Можно ли отправить запрос в одно и то же время. Если нет, то как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 30 мая 2009

Поскольку flex основан на событиях, это должно быть довольно просто. Просто создайте 2 объекта URLRequest (я предполагаю, что оба API основаны на REST) ​​и установите переменные GET. Создайте прослушиватель события loadComplete для каждого объекта URLRequest, а в каждом из обработчиков событий напишите код, который обрабатывает результаты обоих API.

Это должно сделать это.

0 голосов
/ 01 июня 2009

Не «одновременно», нет. С одной стороны, у вас есть только один (фоновый) поток для работы, и этот поток может делать только одну вещь за раз, поэтому, как бы вы ни писали свой код, один из запросов всегда будет инициирован первым.

Если вы спрашиваете, можете ли вы отправить запрос обеим службам за один вызов, то снова ответ - нет (поскольку у обоих будут разные URL-адреса, а API-интерфейсы ActionScript не принимают массивы в качестве URL-адреса параметры, они принимают только строки).

Тем не менее, я полагаю, вы могли бы, так сказать, «подделать это», если бы ваше приложение Flex вызывало службу, которую вы написали самостоятельно - например, в C #, - и вызывало эту службу (синхронно) в Google, затем в Yahoo затем верните управление обратно в свое приложение Flex вместе с измененным набором результатов, состоящим из того, что случилось с Google и Yahoo соответственно.

Если я не понимаю (или переосмысливаю) вопрос. ;)

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">

    <mx:Script>
        <![CDATA[

            import mx.rpc.http.HTTPService;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;

            private function onCreationComplete():void
            {
                callGoogle();
                callYahoo();
            }

            private function callGoogle():void
            {
                var svc:HTTPService = new HTTPService();
                svc.url = "http://api.google.com/someservice.xml";
                svc.addEventListener(ResultEvent.RESULT, onGoogleResult, false, 0, true);
                svc.addEventListener(FaultEvent.FAULT, onGoogleFault, false, 0, true);
                svc.send();
            }

            private function callYahoo():void
            {
                var svc:HTTPService = new HTTPService();
                svc.url = "http://api.yahoo.com/someservice.xml";
                svc.addEventListener(ResultEvent.RESULT, onYahooResult, false, 0, true);
                svc.addEventListener(FaultEvent.FAULT, onYahooFault, false, 0, true);
                svc.send();
            }

            private function onGoogleResult(event:ResultEvent):void
            {
                trace(event.result);
            }

            private function onGoogleFault(event:FaultEvent):void
            {
                trace(event.fault.message);
            }

            private function onYahooResult(event:ResultEvent):void
            {
                trace(event.result);
            }

            private function onYahooFault(event:FaultEvent):void
            {
                trace(event.fault.message);
            }

        ]]>
    </mx:Script>

</mx:Application>

Надеюсь, это поможет! Отпишитесь с комментариями, и я буду следить.

...