2024
11
22
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: