如何使用“l = new LoadVars ();”这样的代码迁移到 AS3

Posted

技术标签:

【中文标题】如何使用“l = new LoadVars ();”这样的代码迁移到 AS3【英文标题】:how can I migrate to AS3 with code like this "l = new LoadVars ();" 【发布时间】:2020-04-20 13:25:30 【问题描述】:

我是初学者。我开始学习 Adob​​e Flash。我在 AS2 上按照 Google 上的代码:

l = new LoadVars();
l.onLoad = function(ok) 
ttl0=l.ttlslv0; atc0=l.atcslv0;
ttl1=l.ttlslv1; atc1=l.atcslv1;
;
l.sendAndLoad("http:localhost/getdata.php", l, "POST"); 

像这样使用php:

<?php
include_once("koneksi.php");
$qr = mysqli_query($con,"SELECT title, article from $tabel");
$nr = 0;
while($kolom=mysqli_fetch_row($qr) )
 
$ttl=$kolom[0];
$atc=$kolom[1];
echo "&ttlslv$nr=$ttl&atcslv$nr=$atc";
$nr++;

echo "&nr=$nr&";
?>
结果我可以指定“哪一行”和“哪一列”。 可以将其更改为具有相同结果的 AS3 吗? 我学习 AS3 有困难 有人想给我一个解决方案吗?谢谢...

【问题讨论】:

【参考方案1】:

在 AS3 中,您使用 URLLoader class 加载文本/二进制数据。要使用 URL 编码的字符串,您需要 URLVariables class。

类似的东西(未经测试,也没有错误处理,只是一个通用指南):

// URLRequest instance holds various information
// about what, where and how you send.
var aRequest:URLRequest = new URLRequest;

// URL address.
aRequest.url = "http://localhost/getdata.php";

// Request method (POST or GET mostly).
aRequest.method = URLRequestMethod.POST;

// URLLoader instance performs the requested operations:
// uploads the request and relevant data, reads the answer,
// and dispatches all the events about any status changes.
var aLoader:URLLoader = new URLLoader;

// Tell the URLLoader that the answer is
// an URL-encoded text of key=value pairs.
aLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

// This event handler function will be triggered
// upon successfully completed operation.
aLoader.addEventListener(Event.COMPLETE, onData);

// Start loading.
aLoader.load(aRequest);

// The COMPLETE event handler function.
function onData(e:Event):void

    // Unsubscribe from the event. For the most part it is
    // a GOOD idea NOT to re-use any network-related
    // class instances once they've done their job.
    // Just unsubscribe from all their events,
    // dismantle their data structures, purge
    // any references to them and let the
    // Garbage Collector do his job.
    aLoader.removeEventListener(Event.COMPLETE, onData);

    // Retrieve the object that contains key=value pairs.
    var anAnswer:URLVariables = aLoader.data as URLVariables;

    // The data you wanted to get.
    trace(anAnswer.ttlslv0);
    trace(anAnswer.atcslv0);
    trace(anAnswer.ttlslv1);
    trace(anAnswer.atcslv1);

UPD:您似乎正在处理转义文本。我编写了一个简单的脚本来解释它是如何工作的:

import flash.net.URLVariables;

var V:URLVariables = new URLVariables;
var S:String = "a=1&b=2";

V.decode(S);
trace(V.a); // 1
trace(V.b); // 2

S = escape(S);
trace(S); // a%3D1%26b%3D2
trace(unescape(S)); // a=1&b=2

V.decode(S); // Error #2101

因此,您可以使用两个选项:

    找出服务器传递转义字符串的原因并阻止它。 将服务器的答案加载为纯文本(URLLoaderDataFormat.TEXT 而不是 VARIABLES),因此 URLLoader.data 将只是一个简单的String,然后在必要时将其 unescape(...) 提供给 URLVariables.decode(...)

【讨论】:

我刚试过这个。我收到这样的错误:错误:错误#2101:传递给 URLVariables.decode() 的字符串必须是包含名称/值对的 URL 编码查询字符串。在 Flash.net::URLVariables/decode() 的 Error$/throwError() 在 flash.net::URLVariables() 在 flash.net::URLLoader/onComplete() 我用脚本成功显示了数据。但问题在于以编码数据形式出现的数据。在第一列“ttlslv0 =”可以检索。但是在下一列ttlslv1、atcslv0等都变成了这样的代码:“%0Attlslv0%3D”这样符号“=”就消失了,变成了%3D。 “% 0Attlslv0% 3D”不被视为与 ttlslv0 不同的变量,而是作为 ttlslv0 的值输入。 as2和as3中的编码器有什么区别吗? as2 中的“&”字符不变,“=”不变。但为了在 as3 上运行,必须删除“&”字符。和“=”改变。 @Kholishudin 我进行了一个简单的测试并更新了我的答案。

以上是关于如何使用“l = new LoadVars ();”这样的代码迁移到 AS3的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?