【问题标题】:#2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs#2101: 传递给 URLVariables.decode() 的字符串必须是包含名称/值对的 URL 编码查询字符串
【发布时间】:2012-07-15 02:29:35
【问题描述】:

我有这个 Flash 代码。它将我游戏中的分数和用户名发送到 savescores.php。但我有上面的错误。我已将 URLLoaderDataForma.VARIABLES 更改为 TEXT,但仍然发生相同的错误。我应该怎么做才能解决这个问题?提前谢谢..

private function SendScore(score:int) 
    {
        var variables:URLVariables = new URLVariables();
        variables.score = score;
        variables.username = username;
        var urlloader:URLLoader = new URLLoader();

        var urlrequest:URLRequest = new URLRequest('http://localhost:90/savescores.php');
        urlrequest.method = URLRequestMethod.POST;
        urlrequest.data = variables;
        urlloader.dataFormat = URLLoaderDataFormat.TEXT;

        urlloader.load(urlrequest);
        urlloader.addEventListener(Event.COMPLETE, CompleteHandler, false, 0, true);
        urlloader.addEventListener(IOErrorEvent.IO_ERROR , ErrorHandler, false, 0, true);
    }

    private function CompleteHandler(e:Event) 
    {
        var vars:URLVariables = new URLVariables(e.target.data);
        if(vars.success) trace('Saving succeeded');
        else ('Saving failed');
    }

    private function ErrorHandler(e:IOErrorEvent) 
    {
        trace('Error occured');
    }

【问题讨论】:

  • 阿尼尔,如果您解决了问题,请回答您自己的问题并将其标记为正确答案。

标签: php actionscript-3 flash


【解决方案1】:

回答:问题出在 PHP 上

-- 你必须返回一个 var 到 AS3 否则你会得到这个错误。

我发布此内容是因为除非查看者阅读 cmets,否则他们将不知道问题所在和解决方案。提出这个问题的 Anil 表示这是 PHP 而不是 as3 的问题,但没有给出原因。上面标记为正确的答案似乎不是一个充分的答案,因为它只提出了一个可能的解决方案。 Anil 承认这是 php 的问题。我相信这个答案更完整,可以帮助遇到同样问题的人。

我遇到了类似的问题。问题出在 php.ini 中。除非你从 php 输出一些东西,否则你会得到这个错误。

Flash 不喜欢从 php 中返回任何内容并给出以下错误:

错误:错误 #2101:传递给 URLVariables.decode() 的字符串必须是包含名称/值对的 URL 编码查询字符串。 在错误$/throwError() 在 flash.net::URLVariables/decode() 在 flash.net::URLVariables() 在 flash.net::URLLoader/onComplete()

这是我的 PHP 的一部分,没有返回任何内容:

if($ConfirmedEmail=="true")
{
    echo "Status=true";
}
if($ConfirmedEmail=="false")
{
    echo "Status=false";
}

但如果它既不是真/假,它也不会输出任何内容。 = Flash 不喜欢!

所以 PHP 代码必须是这样的:

if($ConfirmedEmail=="true")
{
    echo "Status=true";
}
else if($ConfirmedEmail=="false")
{
    echo "Status=false";
}
else
{
    echo "Status=Nada";
}

这是我的 AS3 代码供您查看。希望它可以帮助某人。

public function checkEmail(e:Event = null)
{

    var urlreq = new URLRequest("http://www.MyWebsite.com/myScript.php");
    urlreq.method = URLRequestMethod.POST;

    var urlvars = new URLVariables();
    urlvars.userID = Main.userID;


    urlreq.data = urlvars;

    var loader:URLLoader = new URLLoader(urlreq);
    loader.addEventListener(Event.COMPLETE, completed);
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.load(urlreq);
}

public function completed(event:Event):void
{
    var variables:URLVariables = new URLVariables(event.target.data);
    trace("Email Confirmed: " + variables.Status);
}

【讨论】:

  • 我试过你的代码,但它给了我undefined ,当我删除变量后的状态时,它给了我 Status=true,我只想打印 true 或 false 如何我能做到吗?
【解决方案2】:

我认为问题不在于请求,而在于响应处理。您将 var 实例化为 URLVariables,但可能 e.target.data 不符合预期的格式。跟踪 e.target.data 值以获取更多信息。

【讨论】:

  • 感谢您的回答。我的 php 端有问题,我想通了并修复了它。现在可以了。
  • 我不知道为什么这个答案被选为正确答案,而它显然不正确。 Anil,如果您解决了问题,请回答您自己的问题并将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多