Example: DataSource.Get

DataSource.Get uses the Get Utility to retrieve data, even cross-domain resources, via a dynamically created script node. A DataSchema plugin is used to normalize incoming data into a known format for consistency of usage by other components. Please note that your data resource must support a callback mechanism, which is a function wrapper around the returned data. The name of the callback function is passed to the resource via a query string parameter defined by the DataSource.Get attribute scriptCallbackParam.

JSON

Data
{
    "query":{
        "count":"10",
        "created":"2011-06-15T04:36:13Z",
        "lang":"en-US",
        "results":{
            "event":[
                {
                 "id": "6826736",
                 "name": "PGA Fall Expo 2011",
                 "start_date": "2011-08-01",
                 "venue_name": "The Venetian Congress and Sands Expo Convention Center",
                 ...
                },
                {
                 "id": "7228592",
                 "name": "NAHC 30th Annual Meeting & Exposition",
                 "start_date": "2011-10-01",
                 "venue_name": "Mandalay Bay Resort",
                 ...
                },
                {
                 "id": "7238009",
                 "name": "Water and Society 2011-First International Conference on Water and Society",
                 "start_date": "2011-12-05",
                 "venue_name": "Richard Tam Alumni Center",
                 ...
                },
                ...
            ]
        }
    }
}
    
Schema
{
    resultListLocator: "query.results.event",
    resultFields: ["name"]
}
    
Normalized data

Use a DataSourceJSONSchema plugin to parse the data against a schema that you provide:

YUI().use("datasource-get", "datasource-jsonschema", function(Y) {
    var myDataSource = new Y.DataSource.Get({
            source: "http://query.yahooapis.com/v1/public/yql?format=json&"
        });

    myDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
        schema: {
            resultListLocator: "query.results.result",
            resultFields: ["title"]
        }
    });

    myDataSource.sendRequest({
        request: "q=select%20*%20from%20upcoming.events.bestinplace...",
        callback: {
            success: function (e) { /* output to screen */ },
            failure: function (e) { /* output to screen */ }
        }
    });

});