0

I have this code for a mock up mobile app on 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);
    }

}

}

But I get the following errors:

**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()**

1 Answer 1

1

You probably receive invalid JSON from getCategories.php.

Try running the getCategories.php script in a browser (by pasting the (full) URL in the address bar) and copying the JSON you get into the jsonlint validator. This should give you a heads up about anything invalid.

For a definition of valid JSON check out json.org

Sign up to request clarification or add additional context in comments.

9 Comments

but when i run my JSON on the web it works well, i get the errors when i try to run the swf
@RominaMora Exactly what do you mean "run my JSON on the web"?
@RominaMora The script may work, it may run perfectly, but that doesn't mean that the JSON it outputs is valid. You have to take extra care that the produced JSON is valid before passing it on to some parser.
i think my code i posted first has some errors when calling the JSON its a .as file for the Categories' Screen of the "app"
you are right i used the jsonlint and it's not valid my code for the JSON is <?php // Make a MySQL Connection mysql_connect("localhost", "jmora", "hh5v7") or die(mysql_error()); mysql_select_db("jmora") or die(mysql_error()); // Retrieve the data from the "products" table $result = mysql_query("SELECT prodid, MexCandy.categoryid, prodname, prodrating, price, proddescription, prodpic FROM MexCandy") or die(mysql_error()); // store all the records of the "products" table while($products = mysql_fetch_array( $result, MYSQL_ASSOC)) { echo json_encode($products); } ?>
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.