代码之家  ›  专栏  ›  技术社区  ›  hitek

在flash中显示JSON

  •  0
  • hitek  · 技术社区  · 15 年前

    我试图使用JSON将数据拉到flash中,但我一直收到这个错误

    JSONParseError: Unexpected < encountered
     at com.adobe.serialization.json::JSONTokenizer/parseError()
     at com.adobe.serialization.json::JSONTokenizer/getNextToken()
     at com.adobe.serialization.json::JSONDecoder/nextToken()
     at com.adobe.serialization.json::JSONDecoder()
     at com.adobe.serialization.json::JSON$/decode()
     at jsonairtest_fla::MainTimeline/decodeJSON()
     at flash.events::EventDispatcher/dispatchEventFunction()
     at flash.events::EventDispatcher/dispatchEvent()
     at flash.net::URLLoader/onComplete()
    

    尽管我无法在浏览器中运行pp文件,而且输出对我来说很好,但我甚至尝试调用一个txt文件,这很有效,但我不知道我在这里做错了什么。

    这是AS3代码

     import com.adobe.serialization.json.JSON
    
        var loader:URLLoader = new URLLoader();
        var request:URLRequest = new URLRequest();
    
    
        request.url = "pull.php";
        loader.load(request);
    
        loader.addEventListener(Event.COMPLETE, decodeJSON);
    
    
        function decodeJSON(event:Event):void{
        var loader2:URLLoader = URLLoader(event.target);
        //trace(event.target.data);
        var People:Array = JSON.decode(loader2.data);
    
        trace(People[0].NETWORKNAME) ; 
        trace(People[1].NETWORKNAME) ; 
    
          }
    

    PHP代码:

     <?php
    
           $host="localhost";
           $user="";
           $password="";
           $database="db name";
           $tablename="table name";
    
           header('Content-type: application/json');
    
           if(!$connection = mysql_connect($host,$user,$password))
            {
                //if connection not eastablished then display message and die
                $message = mysql_error();
                //echo "$message<br>";
                die();
            }else
            // in case the connection is eastablished 
            $message = "Connection eastablished.....";
            //echo"$message<br>";
             mysql_select_db($database,$connection)
                or die("database not found");
             $query = mysql_query("SELECT NETWORKNAME from $tablename);
            $returnArray = array(); 
             while($row=mysql_fetch_assoc($query))
             array_push($returnArray, $row);
    
            mysql_close();
            echo json_encode($returnArray);
    
        ?>
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   adamk    15 年前

    要将响应转换为未编码的JSON对象数组,请尝试以下操作:

    var jsonArray:Array = loader2.data.match(/\{.*?\}/gi);
    

    然后简单地在数组的每个成员上循环调用JSON.decode。:)

        2
  •  1
  •   wajiw    15 年前

    在php输出中,是否将头类型设置为json?

    header('Content-type: application/json');
    

    解码器可能需要正确的类型。

        3
  •  1
  •   Juan Pablo Califano    15 年前

    错误信息显示 < 在一个意想不到的位置。

    我的猜测是,您无意从文件系统中读取php,而不是在服务器上运行它。你的文件不是作为php代码执行的 < 可能是php脚本的开头标记( <? <?php ).

    如果您是从IDE运行此代码,则url应该类似于:

    htp://localhost/my_project/pull.php
    

    如果您在浏览器上运行此命令,则不需要绝对路径,但请确保您的swf在http环境(当然,该环境能够执行php)上运行。也就是说,像这样测试:

    http://localhost/my_project/index.php 
    

    (其中index.php是嵌入swf的hmtl文件)