php Array into AS3 first variable null error ,其他变量都正常。有啥想法吗?错误 #2007

Posted

技术标签:

【中文标题】php Array into AS3 first variable null error ,其他变量都正常。有啥想法吗?错误 #2007【英文标题】:Php Array into AS3 first variable null error , other variables are all fine. Any thoughts? Error #2007php Array into AS3 first variable null error ,其他变量都正常。有什么想法吗?错误 #2007 【发布时间】:2013-11-18 15:41:18 【问题描述】:

我对 AS3 和 php 还很陌生。尝试将数组从 Php 传递到 AS3 VO 文件,然后将其解析为 Vector,然后将它们打包在盒子中。 发生了一件非常奇怪的事情,通过的第一个变量始终为空,我调换了位置,第一个变量仍然为空。但其余的变量都很好。如果有人可以解决我的问题,将非常感谢! 忽略任何可能的 SQLi 注入问题,我还没有时间改变这些。谢谢!

php

<?php
ini_set('display_errors', 1); error_reporting(E_ALL);

session_start();

include 'connect.php';


$_SESSION['username'];
$username=$_SESSION['username'];


$result=mysqli_query($con,"SELECT * FROM Test WHERE username = '$username'")or die( mysqli_error($con));
$solutions = array();
$check_num_rows=mysqli_num_rows($result);

while ($row = mysqli_fetch_assoc($result))


        $solutions[5]=$row['LoZip1'];
      $solutions[2]=$row['rangelow1'];
       $solutions[3]=$row['rangehigh1'];
       $solutions[4]=$row['nobed1'];


echo "rangelow1=".$solutions[2];
echo "&rangehigh1=". $solutions[3];
echo "&bed1=".$solutions[4];
echo "&LoZip1=".$solutions[5];
?>

BookVO.as

package  com.clark
   
    import flash.display.*;
    import flash.net.*;
    import flash.events.*;
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLVariables;


    public class BookVO 
    
        public var bed1:String;
        public var LoZip1:String;
        public var rangelow1:String;
        public var rangehigh1:String;
        public var Bend:URLRequest;
        public var variabless:URLVariables;
        public var nLoader:URLLoader;
        public var callMethod:Function;


        public function BookVO(listener:Function = null)  


            Bend = new URLRequest("http://localhost/Autoresult.php");
            Bend.method = URLRequestMethod.POST;



            variabless = new URLVariables();
            Bend.data = variabless;


            nLoader = new URLLoader();
            nLoader.dataFormat = URLLoaderDataFormat.TEXT;
            nLoader.addEventListener(Event.COMPLETE,Jandler);
            nLoader.load(Bend);
              if (listener != null) 
                callMethod = listener;
            
        

             public function Jandler(event:Event) 
            // handler for the PHP script completion and return of status
            var responseVariables:URLVariables = new URLVariables(event.target.data);
            bed1 = responseVariables.bed1 ;
            LoZip1 = responseVariables.LoZip1;
            rangelow1 = responseVariables.rangelow1;
            rangehigh1 = responseVariables.rangehigh1;

            if (callMethod != null) 
                callMethod(this);
                               
            

    


向量测试

package  com.clark

    import flash.display.MovieClip;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.display.Sprite;

    public class VectorTest extends MovieClip 
    
          public var books:Vector.<BookVO>;
        public function VectorTest() 
        
    books = new Vector.<BookVO>();

            for (var i:int = 0; i <length; i++) 
            

            var book:BookVO = new BookVO(response);     
                books.push(book);


            
        


            private function response(book:BookVO):void
            
                trace("Name:",book.bed1);
                trace("Zip:", book.LoZip1);
                trace("ranglow:", book.rangelow1);
                trace("rangehigh:", book.rangehigh1);
                 // call finish() if this is the last book.
                 if (books.indexOf(book) == books.length - 1) 
                finish();
            
            


            private function finish():void 
            var currentY:int = 270;

            for (var k:int = 0; k < books.length; k++) 
            
                var Bolder:Listing2 = new Listing2();
                Bolder.x=80;

                var tf:TextField = new TextField();
                var tf1:TextField = new TextField();
                var tf2:TextField = new TextField();
                var tf3:TextField = new TextField();
                tf2.width = 100;
                tf.defaultTextFormat = new TextFormat("Arial", 12, 0, null, null, null, null, null, TextFormatAlign.CENTER);

                tf.width = 100;
                tf.autoSize = TextFieldAutoSize.CENTER;
                tf1.width = 100;
                tf1.autoSize = TextFieldAutoSize.CENTER;
                tf2.autoSize = TextFieldAutoSize.CENTER;
                tf3.autoSize = TextFieldAutoSize.CENTER;
                tf2.width = 100;
                tf1.y= tf.height+5;


                    // Pulling the textfields content out from the current bookVO

                tf.text = books[k].bed1;
                tf1.text = books[k].LoZip1;
                tf2.text = books[k].rangelow1;
                tf3.text = books[k].rangehigh1;
                tf1.x = (Bolder.height-tf.height)*.5
                tf2.x = (Bolder.height-tf.height)*.5
                tf3.x = (Bolder.height-tf.height)*.5


                tf.x = (Bolder.height-tf.height)*.5
                tf.y = (Bolder.height-tf.height)*.5
                Bolder.addChild(tf);
                Bolder.addChild(tf1);
                Bolder.addChild(tf2);
                Bolder.addChild(tf3);

                    // position the object based on the accumulating variable.
                Bolder.y = currentY;

                addChild(Bolder);
                currentY += Bolder.height + 35;
            



        

    


【问题讨论】:

请检查 PHP 的响应字符串。然后你可以确定问题是在PHP端还是在AS3端。 你的意思是追踪 event.target.data 吗?因为php端没有问题。我可以毫无问题地跟踪数据,但是解析它,第一个总是为空,如果我移动变量,第一个变为空,其余变量显示正确的结果 请发布event.target.data的跟踪输出。 URLVariables 代码一目了然。 另外,您在哪一行收到错误 2007? 数据仅供测试,但这里是 rangelow1=b&rangehigh1=bb&bed1=a&LoZip1=bb 在输出窗口名称:a 邮编:bb ranglow: null rangehigh: bb 第 53 行错误(tf2. text = books[k].nobed1;) 从 VO 中拉出文本字段时 【参考方案1】:

我有这个简单的测试代码和你的测试数据:

var s:String = "rangelow1=b&rangehigh1=bb&bed1=a&LoZip1=bb"; 
var u:URLVariables = new URLVariables(s); 
trace(u.bed1, u.LoZip1, u.rangelow1, u.rangehigh1); 

而且它们都没有显示为空。所以解析看起来还可以,但是下面的逻辑是错误的:

if (books.indexOf(book) == books.length - 1) 
    finish()

URLLoader 异步加载数据,因此无法保证所有书籍都会按照您请求的顺序加载。根据网络连接,最后一本书的数据可能会在前一本书的数据之前加载。在这种情况下,您将在finish 中获得空值。要解决这个问题,而不是使用indexof,请使用计数器变量来计算已加载的书籍数量并调用finish 一次counter == books.length

var counter:int = 0;

private function response(book:BookVO):void 
    counter++;

    if (counter == books.length) 
        finish();
    

【讨论】:

太棒了!!!!非常感谢!!!爱你男人!!!有用!!!花了我这么长时间,再次感谢! ooo 我刚刚意识到它仍然不起作用哈哈,但我找到了一个更快的解决方案,我从 php 中回显了一个我不需要的变量,并且不在 AS3 中调用它,然后一切正常。跨度> 出于一些非常奇怪的原因,我认为这与 php 中的 & 有关。因为只有第一个变量没有 &。

以上是关于php Array into AS3 first variable null error ,其他变量都正常。有啥想法吗?错误 #2007的主要内容,如果未能解决你的问题,请参考以下文章

php insert_into_array_after

php JSON String into Array或Object

PHP Array into mysql select 语句

php获取数组中的第一个(最后一个)元素

如何在AS3中向数组添加元素?

php根据二维数组的某一项对数组进行排序