source: branches/dev/html/js/json.js @ 12978

Revision 12978, 7.0 KB checked in by nakanishi, 17 years ago (diff)
Line 
1//==============================================================================
2//  SYSTEM      :  »ÃÄêÈÇ¥¯¥í¥¹¥Ö¥é¥¦¥¶AjaxÍѥ饤¥Ö¥é¥ê
3//  PROGRAM     :  XMLHttpRequest¤Ë¤è¤ëÁ÷¼õ¿®¤ò¹Ô¤¤¤Þ¤¹
4//  AUTHER      :  Toshirou Takahashi http://jsgt.org/mt/01/
5
6
7    ////
8    // Æ°ºî²Äǽ¤Ê¥Ö¥é¥¦¥¶È½Äê
9    //
10    // @sample        if(chkAjaBrowser()){ location.href='nonajax.htm' }
11    // @sample        oj = new chkAjaBrowser();if(oj.bw.safari){ /* Safari code */ }
12    // @return        ¥é¥¤¥Ö¥é¥ê¤¬Æ°ºî²Äǽ¤Ê¥Ö¥é¥¦¥¶¤À¤±true  true|false
13    //
14    //  Enable list (v038¸½ºß)
15    //   WinIE 5.5+
16    //   Konqueror 3.3+
17    //   AppleWebKit·Ï(Safari,OmniWeb,Shiira) 124+
18    //   Mozilla·Ï(Firefox,Netscape,Galeon,Epiphany,K-Meleon,Sylera) 20011128+
19    //   Opera 8+
20    //
21   
22    function chkAjaBrowser()
23    {
24        var a,ua = navigator.userAgent;
25        this.bw= {
26          safari    : ((a=ua.split('AppleWebKit/')[1])?a.split('(')[0].split('.')[0]:0)>=124 ,
27          konqueror : ((a=ua.split('Konqueror/')[1])?a.split(';')[0]:0)>=3.3 ,
28          mozes     : ((a=ua.split('Gecko/')[1])?a.split(' ')[0]:0) >= 20011128 ,
29          opera     : (!!window.opera) && ((typeof XMLHttpRequest)=='function') ,
30          msie      : (!!window.ActiveXObject)?(!!createHttpRequest()):false
31        }
32        return (this.bw.safari||this.bw.konqueror||this.bw.mozes||this.bw.opera||this.bw.msie)
33    }
34
35    ////
36    // XMLHttpRequest¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®
37    //
38    // @sample        oj = createHttpRequest()
39    // @return        XMLHttpRequest¥ª¥Ö¥¸¥§¥¯¥È(¥¤¥ó¥¹¥¿¥ó¥¹)
40    //
41    function createHttpRequest()
42    {
43        if(window.XMLHttpRequest){
44             //Win Mac Linux m1,f1,o8 Mac s1 Linux k3 & Win e7ÍÑ
45            return new XMLHttpRequest() ;
46        } else if(window.ActiveXObject){
47             //Win e4,e5,e6ÍÑ
48            try {
49                return new ActiveXObject('Msxml2.XMLHTTP') ;
50            } catch (e) {
51                try {
52                    return new ActiveXObject('Microsoft.XMLHTTP') ;
53                } catch (e2) {
54                    return null ;
55                }
56            }
57        } else  {
58            return null ;
59        }
60    }
61   
62    ////
63    // Á÷¼õ¿®´Ø¿ô
64    //
65    // @sample         sendRequest(onloaded,'&prog=1','POST','./about2.php',true,true)
66    // @sample         sendRequest(onloaded,{name:taro,id:123,sel:1},','POST','./about3.php',true,true)
67    // @sample         sendRequest({onload:loaded,onbeforsetheader:sethead},'',','POST','./about3.php',true,true)
68    // @param {string} callback ¼õ¿®»þ¤Ëµ¯Æ°¤¹¤ë´Ø¿ô̾
69    // @param {object} callback ¼õ¿®»þ¤Ëµ¯Æ°¤¹¤ë´Ø¿ô̾¤È¥Ø¥Ã¥À»ØÄê´Ø¿ô̾{onload:´Ø¿ô̾,onbeforsetheader:´Ø¿ô̾}
70    // @param {array}  callback ¼õ¿®»þ¤Ëµ¯Æ°¤¹¤ë´Ø¿ô̾¤È¥Ø¥Ã¥À»ØÄê ary['onload']=´Ø¿ô̾;ary['onbeforsetheader']=´Ø¿ô̾
71    // @see                    http://jsgt.org/ajax/ref/head_test/header/Range/004/sample.htm
72    // @param {string} data    Á÷¿®¤¹¤ë¥Ç¡¼¥¿ string¤Î¾ì¹ç(&̾Á°1=ÃÍ1&̾Á°2=ÃÍ2...)
73    // @param {object} data    Á÷¿®¤¹¤ë¥Ç¡¼¥¿ object¤Î¾ì¹ç{̾Á°1:ÃÍ1,̾Á°2:ÃÍ2,...}
74    // @param {array}  data    Á÷¿®¤¹¤ë¥Ç¡¼¥¿ array¤Î¾ì¹ç¤ÏÏ¢ÁÛÇÛÎó ary['̾Á°1']=ÃÍ1;ary['̾Á°2']=ÃÍ2
75    // @param {string}method   'POST' or 'GET'
76    // @param {string}url      ¥ê¥¯¥¨¥¹¥È¤¹¤ë¥Õ¥¡¥¤¥ë¤ÎURL
77    // @param {string}async    ÈóƱ´ü¤Ê¤étrue Ʊ´ü¤Ê¤éfalse
78    // @param {string}sload    ¥¹¡¼¥Ñ¡¼¥í¡¼¥É true¤Ç¶¯À©¡¢¾Êά¤Þ¤¿¤Ïfalse¤Ç¥Ç¥Õ¥©¥ë¥È
79    // @param {string}user     Ç§¾Ú¥Ú¡¼¥¸Íѥ桼¥¶¡¼Ì¾
80    // @param {string}password ǧ¾Ú¥Ú¡¼¥¸Íѥѥ¹¥ï¡¼¥É
81    //
82    sendRequest.README   = {
83        url     : 'http://jsgt.org/ajax/ref/lib/ref.htm',
84        name    : 'sendRequest',
85        version : 0.51,
86        license : 'Public Domain',
87        author  : 'Toshiro Takahashi http://jsgt.org/mt/01/',memo:''
88    };
89    function sendRequest(callback,data,method,url,async,sload,user,password)
90    {
91        //XMLHttpRequest¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®
92        var oj = createHttpRequest();
93        if( oj == null ) return null;
94       
95        //¶¯À©¥í¡¼¥É¤ÎÀßÄê
96        var sload = (!!sendRequest.arguments[5])?sload:false;
97        if(sload || method.toUpperCase() == 'GET')url += '?';
98        if(sload)url=url+'t='+(new Date()).getTime();
99       
100        //¥Ö¥é¥¦¥¶È½Äê
101        var bwoj = new chkAjaBrowser();
102        var opera     = bwoj.bw.opera;
103        var safari    = bwoj.bw.safari;
104        var konqueror = bwoj.bw.konqueror;
105        var mozes     = bwoj.bw.mozes ;
106               
107        //callback¤òʬ²ò
108        //{onload:xxxx,onbeforsetheader:xxx}
109        if(typeof callback=='object'){
110            var callback_onload = callback.onload;
111            var callback_onbeforsetheader = callback.onbeforsetheader;
112        } else {
113            var callback_onload = callback;
114            var callback_onbeforsetheader = null;
115        }
116
117        //¼õ¿®½èÍý
118        //opera¤Ïonreadystatechange¤Ë¿½Å¥ì¥¹¥Ð¥°¤¬¤¢¤ë¤Î¤Çonload¤¬°ÂÁ´
119        //Moz,FireFox¤Ïoj.readyState==3¤Ç¤â¼õ¿®¤¹¤ë¤Î¤ÇÄ̾ï¤Ïonload¤¬°ÂÁ´
120        //Win ie¤Ç¤Ïonload¤ÏÆ°ºî¤·¤Ê¤¤
121        //Konqueror¤Ïonload¤¬ÉÔ°ÂÄê
122        //»²¹Íhttp://jsgt.org/ajax/ref/test/response/responsetext/try1.php
123        if(opera || safari || mozes){
124            oj.onload = function () { callback_onload(oj); }
125        } else {
126       
127            oj.onreadystatechange =function ()
128            {
129                if ( oj.readyState == 4 ){
130                    //alert(oj.status+'--'+oj.getAllResponseHeaders());
131                    callback_onload(oj);
132                }
133            }
134        }
135
136        //URL¥¨¥ó¥³¡¼¥É
137        data = uriEncode(data,url);
138        if(method.toUpperCase() == 'GET') {
139            url += data
140        }
141       
142        //open ¥á¥½¥Ã¥É
143        oj.open(method,url,async,user,password);
144
145       
146        //¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¥«¥¹¥¿¥Þ¥¤¥ºÍÑ¥³¡¼¥ë¥Ð¥Ã¥¯
147        //»È¤¦¾ì¹ç¤Ï¡¢¸Æ¤Ó½Ð¤·HTML¦¤Îwindowľ²¼¤Ø¥°¥í¡¼¥Ð¥ë¤Ê´Ø¿ôsetHeaders¤ò
148        //µ­½Ò¤·¡¢¤½¤ÎÃæ¤ÇsetRequestHeader()¤ò¥»¥Ã¥È¤·¤Æ¤¯¤À¤µ¤¤
149        //@sample function setHeaders(oj){oj.setRequestHeader('Content-Type',contentTypeUrlenc)}
150        //
151        if(!!callback_onbeforsetheader)callback_onbeforsetheader(oj);
152
153        //¥Ç¥Õ¥©¥ë¥È¥Ø¥Ã¥Àapplication/x-www-form-urlencoded¥»¥Ã¥È
154        setEncHeader(oj);
155       
156       
157        //¥Ç¥Ð¥Ã¥¯
158        //alert('////jslb_ajaxxx.js//// \n data:'+data+' \n method:'+method+' \n url:'+url+' \n async:'+async);
159       
160        //send ¥á¥½¥Ã¥É
161        oj.send(data);
162
163        //URI¥¨¥ó¥³¡¼¥É¥Ø¥Ã¥À¥»¥Ã¥È
164        function setEncHeader(oj){
165   
166            //¥Ø¥Ã¥Àapplication/x-www-form-urlencoded¥»¥Ã¥È
167            // @see  http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.3
168            // @see  #h-17.3
169            //   ( enctype ¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï 'application/x-www-form-urlencoded')
170            //   h-17.3¤Ë¤è¤ê¡¢POST/GETÌä¤ï¤ºÀßÄê
171            //   POST¤Ç'multipart/form-data'¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤Ï¥«¥¹¥¿¥Þ¥¤¥º¤·¤Æ¤¯¤À¤µ¤¤¡£
172            //
173            //  ¤³¤Î¥á¥½¥Ã¥É¤¬Win Opera8.0¤Ç¥¨¥é¡¼¤Ë¤Ê¤Ã¤¿¤Î¤Çʬ´ô(8.01¤ÏOK)
174            var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8';
175            if(!window.opera){
176                oj.setRequestHeader('Content-Type',contentTypeUrlenc);
177            } else {
178                if((typeof oj.setRequestHeader) == 'function')
179                    oj.setRequestHeader('Content-Type',contentTypeUrlenc);
180            }   
181            return oj
182        }
183
184        //URL¥¨¥ó¥³¡¼¥É
185        //°ú¿ôdata¤Ï¡¢string¤«object¤ÇÅϤ»¤Þ¤¹
186        function uriEncode(data,url){
187            var encdata =(url.indexOf('?')==-1)?'?dmy':'';
188            if(typeof data=='object'){
189                for(var i in data)
190                    encdata+='&'+encodeURIComponent(i)+'='+encodeURIComponent(data[i]);
191            } else if(typeof data=='string'){
192                if(data=='')return '';
193                //&¤È=¤Ç°ìöʬ²ò¤·encode
194                var encdata = '';
195                var datas = data.split('&');
196                for(var i=1;i<datas.length;i++)
197                {
198                    var dataq = datas[i].split('=');
199                    encdata += '&'+encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
200                }
201            }
202            return encdata;
203        }
204
205        return oj
206    }
Note: See TracBrowser for help on using the repository browser.