2025
12
05
2011
01
19
JSONPでレスポンスが返らない場合の処理
JSONPで、データの要求をした場合、コールバック関数が実行されます。また、リクエストに不備があった場合には、エラーコードが返って来ることが多いでしょう。しかしながら、何のレスポンスもない場合があります。このような場合に、何らかの処理をする必要があるときは、どうしたらよいでしょう。
便法としては、setTimeout関数を利用する方法があります。すなわち、サーバーにリクエストを送ると同時に、何秒かに実行される関数を指定するのです。その関数の中で、レスポンスが返って来ない場合の処理を記述するのです。レスポンスが返って来たか来ないかは、フラグを設定しておいて、コールバック関数の中でフラグを変更すれば、把握することができます。
サンプル
「Callback OK」ボタンを押すと、コールバック関数が実行されます。「No Callback」ボタンを押すと、実在しないURLを呼び出します。したがって、リクエストは返ってきません。
ソースコード
var url_110119
="http://blog.cnobi.jp/v1/blog/user/c1c990de467ed4f31a60b43ae3632205/1283165509"
if(!neta.iconSearch)neta.iconSearch={};
neta.iconSearch.callback=function(obj){
neta.jsonp.requestStatus=true;
alert('callback OK');
}
neta.iconSearch.noCallback=function(){
if(!neta.jsonp.requestStatus){
alert('No Callback');
}
clearTimeout(neta.jsonp.tid);
}
neta.jsonp={};
neta.jsonp.requestStatus=false;
neta.jsonp.tid=null;
neta.jsonp.request=function(s){
neta.jsonp.requestStatus=false;
if(neta.jsonp._jsonp){
neta.jsonp._jsonp.parentNode
.removeChild(neta.jsonp._jsonp);
}
var L=document.createElement('script');
L.type='text/javascript';
L.charset='UTF-8';
document.getElementsByTagName('head')[0]
.appendChild(L);
L.src=s;
neta.jsonp._jsonp=L;
neta.jsonp.tid=setTimeout(
"neta.iconSearch.noCallback()",3000);
}
neta.addListener(function(){
document.getElementById('btnCallback')
.onclick=function(e){
neta.jsonp.request(url_110119);
if(e.stopPropagation){
e.stopPropagation();
}else if(event){
event.cancelBubble = true;
}
};
document.getElementById('btnNoCallback')
.onclick=function(e){
neta.jsonp.request('notExist.jsonp');
if(e.stopPropagation){
e.stopPropagation();
}else if(event){
event.cancelBubble = true;
}
};
});
なお、neta.addListener は、お手製のイベントリスナーです。
PR
2011/01/19 (Wed.) Trackback() Comment(0) JSONP
Comments
Trackback
Trackback for this entry:
