apache-flex Flex:如何在先前POST的返回处理程序中对同一个URL执行新的POST(2032)?

oknwwptz  于 2022-11-01  发布在  Apache
关注(0)|答案(2)|浏览(153)

背景:我被征召去维护和更新一个flash/flex/as 3前端到网站,在后端使用php。我在这方面越来越好了,但是我仍然是这个环境的新手。
我需要在POST的返回处理程序中接收到一些处理过的信息。我认为在返回处理程序中执行下一个POST是很聪明的。换句话说,我得到了如下所示的信息:

private function finishThis():void
{
    var s:HTTPService = new HTTPService();
    rq.action = "do_something";
    s.url = "inc/php/test.php";
    s.method = "POST";
    s.request = rq;
    s.requestTimeout = 120000;
    s.addEventListener(ResultEvent.RESULT, doSomethingRH);
    s.send();
    s.disconnect();  // That's a test, it didn't help
}

然后在doSomethingRH()中,我得到了

private function doSomethingRH(event:ResultEvent):void
{
    doSomethingElse();
}

private function doSomethingElse():void
{
    var s:HTTPService = new HTTPService();
    rq.action = "do_something_else";
    s.url = "inc/php/test.php";
    s.method = "POST";
    s.request = rq;
    s.requestTimeout = 120000;
    s.addEventListener(ResultEvent.RESULT, doSomethingElseRH);
    s.send();
    s.disconnect();  // That's new, it wasn't there before
}

使用http://localhost(WAMP)时,所有这些都可以正常工作。但是在网上,虽然我有后端指示,函数do_something_else可以运行(到目前为止),但是函数doSomethingElseRH()从来没有被调用过。相反,我得到了我在几个帖子中看到的错误:
[RPC错误代码=“服务器.错误.请求”错误详细信息=“错误:[IOErrorEvent类型=“ioError”气泡=假可取消=假事件阶段=2
文本=”Error #2032: Stream Error。网址:http://test.net/inc/php/test.php“]中的值。
网址:http://test.net/inc/php/test.php“]
最常指出的问题是太多的同时连接。我不需要做多个连接,但我想也许我已经有了,因为我在以前的POST返回处理程序中启动了新的POST。(),我添加了一个事件并执行了一个dispatchEvent()来调用它,但至少根据FlashDevelop中显示的调用堆栈,对doSomethingElse的最终调用()位于doSomethingRH下()函数(还在学习这个东西)。所有这些都是基于我看到的一篇关于从传递到返回处理程序的事件中获取HTTPService示例的帖子的猜测。
我的最终问题是,我如何才能实现像这样的连续POST而不出现错误?
如果我因为将它们链接在一起的方式而得到错误,是否有一个清理函数可以让我在调用返回处理程序时完全关闭连接?

更新-很好

在两个函数中都调用了一个PDF引擎,一个用于创建基本文件,另一个用于附加一些页面。它工作得很好,但是最近更新了。阻止那些活动允许HTTP流按预期工作,不需要disconnect()。
我能说的最好的是,这是一个我在网上没有看到的将呼叫链接在一起的例子,我想这是一个很好的例子。

wz3gfoph

wz3gfoph1#

这可能是你s.disconnect();太快(因此PHP文件没有找到)。为什么在.send之后立即断开连接之前,甚至有机会做任何事情?硬盘上的文件访问比Web服务器之间的速度快。如果仍然失败,然后尝试添加一个延迟(* 即:* 断开连接,然后启动一个计时器,计数到3秒),然后再尝试做doSomethingElse();...
未经测试但尝试:

public var s:HTTPService; //make one and re-use 

private function finishThis():void
{
    s = new HTTPService();
    rq.action = "do_something";
    s.url = "inc/php/test.php";
    s.method = "POST";
    s.request = rq;
    s.requestTimeout = 120000;
    s.addEventListener(ResultEvent.RESULT, doSomethingRH);
    s.send();

}

...然后在doSomethingRH()中:

private function doSomethingRH(event:ResultEvent):void
{
    s.disconnect(); //is now finished so disconnect before re-use
    doSomethingElse();
}

private function doSomethingElse():void
{
    s = new HTTPService();
    rq.action = "do_something_else";
    s.url = "inc/php/test.php";
    s.method = "POST";
    s.request = rq;
    s.requestTimeout = 120000;
    s.addEventListener(ResultEvent.RESULT, doSomethingElseRH);
    s.send();

}
nszi6y05

nszi6y052#

  • h t t p应为http
  • 相对url相对于swf的加载位置...我将有一个baseUrl变量,您希望它是相对url

相关问题