src/cm/media/js/lib/yui/yui3.0.0/examples/io/io-xdr_clean.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
<html>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
<head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
<meta http-equiv="content-type" content="text/html; charset=utf-8">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
<title>Cross-Domain JSON Transaction &mdash; Retrieving a News Feed from Yahoo! Pipes</title>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
/*margin and padding on body element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
  can introduce errors in determining
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
  element position and are not recommended;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
  we turn them off as a foundation for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
  CSS treatments. */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
body {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
	margin:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
	padding:0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
<script type="text/javascript" src="../../build/yui/yui-min.js"></script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
<!--begin custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
<style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
#output li {margin-left:2em;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
#output { background-color:#FFFFFF; border:1px dotted #666666; padding:1em; margin-top:1em;}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
</style>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
<!--end custom header content for this example-->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
</head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
<body class=" yui-skin-sam">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
<h1>Cross-Domain JSON Transaction &mdash; Retrieving a News Feed from Yahoo! Pipes</h1>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
<div class="exampleIntro">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
	<p>In the example below, IO is employed to make a cross-domain request to <a href="http://pipes.yahoo.com">Yahoo! Pipes</a>.  The output of the Pipe is an RSS-style feed formatted as JSON.  We pass that output to the JSON Utility's <code>parse</code> method for sanitization and then display the contents of the Pipe in a list.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
<p>The cross-domain approach obviates the need for a server-side proxy, making it faster. And the use of IO in place of a script node allows us to retrieve the JSON data as a string and execute <code>JSON.parse</code> against it, making it safer to use; a script node would evaluate immediately in the global scope as soon as it was loaded.</p>			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
<button id="fetch" disabled="disabled">Load JSON RSS news feed from Yahoo! Pipes.</button>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
<div id="output">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
	<ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
		<li>Content from Yahoo! Pipes feed will display here.</li>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
    </ul>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
</div>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
<script language="javascript">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
YUI({base:"../../build/", timeout: 10000}).use("io", "substitute", "json-parse",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
	function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
		//Data fetched will be displayed in a UL in the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
		//element #output:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
		var output = Y.Node.get("#output ul");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
		//Configure the cross-domain protocol:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
		var xdrConfig = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
			id:'flash', //We'll reference this id in the xdr configuration of our transaction.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
			yid: Y.id,  //The yid provides a link from the Flash-based XDR engine
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
						//and the YUI instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
			src:'../../build/io/io.swf?t=' + new Date().valueOf().toString() //Relative path to the .swf file from the current page.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
		};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
		Y.io.transport(xdrConfig);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
		//Event handler called when the transaction begins:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
		var handleStart = function(id, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
			Y.log("io:start firing.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
			output.set("innerHTML", "<li>Loading news stories via Yahoo! Pipes feed...</li>");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
		//Event handler for the success event -- use this handler to write the fetched
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
		//RSS items to the page.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
		var handleSuccess = function(id, o, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
			//We use JSON.parse to sanitize the JSON (as opposed to simply eval'ing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
			//it into the page):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
			var oRSS = Y.JSON.parse(o.responseText);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
			//From here, we simply access the JSON data from where it's provided
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
			//in the Yahoo! Pipes output:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
			if (oRSS && oRSS.count) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
				var s = "<!--begin news stories fetched via Yahoo! Pipes-->",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
					//t in this case is our simple template; this is fed to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
					//Y.Lang.substitute as we loop through RSS items:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
					t = "<li><a href='{link}'>{title}</a>, {pubDate}</li>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
				for (var i=0; i<oRSS.count; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
					s += Y.Lang.substitute(t, oRSS.value.items[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
				//Output the string to the page:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
				output.set("innerHTML", s);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
				output.addClass("yui-null");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
			} else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
				//No news stories were found in the feed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
				var s = "<li>The RSS feed did not return any items.</li>";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
		//In the event that the HTTP status returned is > 399, a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
		//failure is reported and this function is called:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
		var handleFailure = function(id, o, a) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
			Y.log("ERROR " + id + " " + a, "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
		//With all the aparatus in place, we can now configure our
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
		//io call.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
		var cfg = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
			method: "GET",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
			xdr: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
				use:'flash' //This is the xdrConfig id we referenced above.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
			},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
			on: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
				//Our event handlers previously defined:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
				start: handleStart,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
				success: handleSuccess,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
				failure: handleFailure
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
		};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
		//Wire the buttton to a click handler to fire our request each
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
		//time the button is clicked:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
		var handleClick = function(o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
			Y.log("Click detected; beginning io request to Yahoo! Pipes.", "info", "example");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
			var obj = Y.io(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
				//this is a specific Pipes feed, populated with cycling news:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
				"http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
				cfg
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
			);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
		//add the clickHandler as soon as the xdr Flash module has
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
		//loaded:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
		Y.on('io:xdrReady', function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
			var fetch = Y.Node.get("#fetch");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
			fetch.set("disabled", false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
			Y.on("click", handleClick, fetch);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
		});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
</script>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
<!--END SOURCE CODE FOR EXAMPLE =============================== -->
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
</body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
</html>