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);