23.04.2013 Views

javascript

javascript

javascript

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CHAPTER 10 ■ SCRIPTING BOM<br />

448<br />

{<br />

"href": "ten.html",<br />

"src": "images/vomero.jpg",<br />

"alt": "Nike Zoom Vomero"<br />

},<br />

{<br />

"href": "ten.html",<br />

"src": "images/max.jpg",<br />

"alt": "Nike Air Max"<br />

}<br />

]);<br />

Let’s define a function named parseJSONP. Insofar as we’re not making an parseJSONP request, let’s<br />

name the parameter data, not req. As we’ve done several times before, move prep() from parseJSON() to<br />

parseJSONP(). However, rather than call getData() for data/s6.js, simply call parseJSONP() instead.<br />

Remember, we’re bypassing XMLHttpRequest entirely.<br />

function parseJSON(req) {<br />

if (req.status === 200 || req.status === 304) {<br />

var data = JSON.parse(req.responseText);<br />

var div, ul = createElem("ul", {className: "slide"}), li;<br />

for (var i = 0, j = data.length; i < j; i ++) {<br />

li = createElem("li", null, [<br />

createElem("a", {href: data[i].href}, [<br />

createElem("img", {src: data[i].src, alt: data[i].alt})])]);<br />

ul.appendChild(li);<br />

}<br />

div = createElem("div", {className: "scroller", id: "s5"}, [<br />

createElem("div", {className: "wrapper"}, [ul]),<br />

createElem("div", {className: "left arrow sprite"}),<br />

createElem("div", {className: "right arrow sprite"})]);<br />

document.body.appendChild(div);<br />

}<br />

parseJSONP();<br />

}<br />

function parseJSONP(data) {<br />

prep();<br />

}<br />

Now when parseJSON() calls parseJSONP(), data will be undefined. In that event, we want to define<br />

padJSON(), the JSON-P callback function. But it has to be global so that it is callable from data/s6.js.<br />

Remember, none of the functions in ten.js is global. They’re all saved to the call object of the selfinvoking<br />

function wrapping the script.<br />

So by way of a closure, we’ll make parseJSONP() callable from the global scope like so. Remember<br />

from Chapter 6 that arguments.callee refers to the function that is runningparseJSONP().<br />

function parseJSONP(data) {<br />

if (typeof data === "undefined") {<br />

var f = arguments.callee;<br />

window.padJSON = function(d) {<br />

f(d);<br />

};

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!