如何使用“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 【问题描述】:我是初学者。我开始学习 Adobe 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]