JSONP、タイマーうまくコールバックされない // タイマーコールバック(やはり呼ばれない) var timer; function timer_test() { var callback = function() { clearTimeout(timer); alert('expired'); }; timer = setTimeout("callback", 0); } //---- 単純AJAX(クロスドメイン制約のため、metatoys.org上しかアクセスできない) function createHttpRequest(){ return new XMLHttpRequest() } function requestFile( data , method , fileName , async ) { var httpoj = createHttpRequest() httpoj.open( method , fileName , async ) httpoj.onreadystatechange = function() { if (httpoj.readyState==4) //受信完了 { on_loaded(httpoj) } } httpoj.send( data ) } function on_loaded(oj) { res = oj.responseText alert(res) } requestFile( '' , 'GET', 'http://metatoys.org/pub/WikiPhone.html' , true ); // JSON-1 var myJSONObject = { "test": "function (arg){ alert('This is a argument : '+arg) }" } eval('var a=' + myJSONObject.test + ''); a('hello'); // JSON-2 (callback) function handler(data) { alert(data) } var myJSONObject = { "test": "function (arg){ handler('This is a argument : '+arg) }" } eval('var a=' + myJSONObject.test + ''); a('hello'); // JSONP var city = '63'; var day = 'tomorrow'; var name = 'lwws1'; var proxy = 'http://app.drk7.jp/xml2json/'; var lwws1 = {}; // リクエストの送信はされているが、コールバックされない。惜しい。。。 lwws1.init = function() { var script = document.createElement('script'); script.charset = 'UTF-8'; script.src = proxy + 'var=' + name + '&url=' + escape('http://weather.livedoor.com/forecast/webservice/rest/v1?city=' + city + '&day=' + day); document.body.appendChild(script); }; lwws1.init(); // コールバックされないので、手動で呼べばちゃんと表示されるよ lwws1.onload = function (data){ var elem = document.createElement("p"); document.body.appendChild(elem); elem.innerHTML = data["location"]["pref"] +' '+ data["location"]["city"] +' '+ data["telop"] +' '+ '
'+ data["description"]; } lwws1.onload(lwws1.data);