0

Flash でモバイル アプリをモックアップするための次のコードがあります。

package  
{

import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.*;
import flash.net.*;
import com.adobe.serialization.json.*;

public class ScreenCategories extends Sprite 
{

    private var lastButtonEndedY:int;
    private var categories:Array;
    private var dataUrl:String = "getCategories.php";

    // Change this to false to use local static data instead;
    private var useRemoteData:Boolean = true;

    // Constructor: Create an array of three categories
    public function ScreenCategories()
    {
        lastButtonEndedY = 35;

        if ( useRemoteData )
        {
            loadCategories();
        }
    }

    public function loadCategories():void
     {
        var request:URLRequest = new URLRequest(dataUrl);
        var loader:URLLoader = new URLLoader();
        loader.dataFormat = URLLoaderDataFormat.TEXT;
        loader.addEventListener(Event.COMPLETE, categoryLoad_complete);
        loader.load(request);
     }

     private function categoryLoad_complete(evt:Event):void
     {
        var jsonText:String = evt.target.data;

        //Deserialize JSON
        categories = JSON.decode(jsonText) as Array;   
    }

    private function initializeCategory():void
    {
        // for each "category" in our list (Array)...
        for (var count in categories)
        {
            // Create a button for each of the categories that exist in our Array
            var aCategory:BtnCategory = new BtnCategory(categories[count].category);

            // Add the BtnCategory to the stage
            aCategory.x = 0;
            aCategory.y = lastButtonEndedY;
            aCategory.name = categories[count].id; // give it a unique name!
            addChild(aCategory);

            lastButtonEndedY += (aCategory.getHeight() + 1);
        }

        addEventListener(MouseEvent.CLICK, mouseClicked);
    }

    public function mouseClicked(e:MouseEvent)
    {
        removeEventListener(MouseEvent.CLICK, mouseClicked);

        // trace the name of the button that was pressed, in this case - the category number!
        var btnPressed:int = parseInt(e.target.name);

        // if the category exists in the Array (ie. not undefined), then display that category!
        if (categories[btnPressed] != undefined)
        {
            displayCategory(btnPressed)
        }

        addEventListener(MouseEvent.CLICK, mouseClicked);
    }

    // We want to go forward to see the list of products in this category, call back to Main.as so make that happen.
    public function displayCategory(categoryId)
    {
        trace ("display product category:" + categoryId);
        var par:* = parent;
        par.displayCategory(categoryId);
    }

}

}

しかし、次のエラーが発生します。

**JSONParseError: Unexpected < encountered
    at com.adobe.serialization.json::JSONTokenizer/parseError()[/Users/rominamora/Documents/AOD/term 3/interactive design/assignment3/com/adobe/serialization/json/JSONTokenizer.as:704]
    at com.adobe.serialization.json::JSONTokenizer/getNextToken()[/Users/rominamora/Documents/AOD/term 3/interactive design/assignment3/com/adobe/serialization/json/JSONTokenizer.as:206]
    at com.adobe.serialization.json::JSONDecoder/nextToken()[/Users/rominamora/Documents/AOD/term 3/interactive design/assignment3/com/adobe/serialization/json/JSONDecoder.as:102]
    at com.adobe.serialization.json::JSONDecoder()[/Users/rominamora/Documents/AOD/term 3/interactive design/assignment3/com/adobe/serialization/json/JSONDecoder.as:71]
    at com.adobe.serialization.json::JSON$/decode()[/Users/rominamora/Documents/AOD/term 3/interactive design/assignment3/com/adobe/serialization/json/JSON.as:95]
    at ScreenCategories/categoryLoad_complete()[/Users/rominamora/Documents/AOD/term 3/interactive design/assignment3/ScreenCategories.as:45]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/onComplete()**
4

1 に答える 1

1

getCategories.php から無効な JSON を受け取る可能性があります。

ブラウザーで getCategories.php スクリプトを実行して ((完全な) URL をアドレス バーに貼り付けて)、取得した JSON をjsonlintバリデーターにコピーしてみてください。これにより、無効なものについて警告が表示されます。

有効な JSON の定義については、json.orgを確認してください。

于 2012-07-11T21:45:07.557 に答える