~mortenoh/+junk/dhis2-detailed-import-export

« back to all changes in this revision

Viewing changes to local/in/dhis-web-integration/src/main/webapp/dhis-web-integration/javascript/request.js

  • Committer: larshelge at gmail
  • Date: 2009-03-03 16:46:36 UTC
  • Revision ID: larshelge@gmail.com-20090303164636-2sjlrquo7ib1gf7r
Initial check-in

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
// -----------------------------------------------------------------------------
 
3
// Author:   Torgeir Lorange Ostby, torgeilo@gmail.com
 
4
// Version:  $Id: request.js 2644 2007-01-03 13:24:56Z torgeilo $
 
5
// -----------------------------------------------------------------------------
 
6
 
 
7
/*
 
8
 * Usage:
 
9
 *
 
10
 * function processResponse( response ) { ... }                 // Text or XML
 
11
 * function requestFailed( httpStatusCode ) { ... }
 
12
 *
 
13
 * var request = new Request();
 
14
 * request.setResponseTypeXML( 'rootElement' );                 // Optional
 
15
 * request.sendAsPost( 'value=1&value=2' );                                     // Optional
 
16
 * request.setCallbackSuccess( processResponse );               // Optional
 
17
 * request.setCallbackError( requestFailed );                   // Optional
 
18
 * request.send( 'url.action?value=1' );
 
19
 */
 
20
 
 
21
function Request()
 
22
{
 
23
    var request;
 
24
    var responseType = 'TEXT';
 
25
    var requestMethod = 'GET';
 
26
    var requestParameters = null;
 
27
    var rootElementName;
 
28
    var callbackSuccess;
 
29
    var callbackError;
 
30
 
 
31
    this.setResponseTypeXML = function( rootElementName_ )
 
32
    {
 
33
        responseType = 'XML';
 
34
        rootElementName = rootElementName_;
 
35
    };
 
36
    
 
37
    this.sendAsPost = function( requestParameters_ )
 
38
        {
 
39
                requestMethod = 'POST';
 
40
                requestParameters = requestParameters_;
 
41
        };
 
42
 
 
43
    this.setCallbackSuccess = function( callbackSuccess_ )
 
44
    {
 
45
        callbackSuccess = callbackSuccess_;
 
46
    };
 
47
    
 
48
    this.setCallbackError = function( callbackError_ )
 
49
    {
 
50
        callbackError = callbackError_;
 
51
    };
 
52
 
 
53
    this.send = function( url )
 
54
    {
 
55
        request = newXMLHttpRequest();
 
56
 
 
57
        if ( !request )
 
58
        {
 
59
            window.alert( "Your browser doesn't support XMLHttpRequest" );
 
60
            return;
 
61
        }
 
62
 
 
63
                request.onreadystatechange = responseReceived;
 
64
        request.open( requestMethod, url, true );
 
65
        request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );                 
 
66
        request.send( requestParameters );
 
67
    };
 
68
        
 
69
    function newXMLHttpRequest()
 
70
    {
 
71
        if ( window.XMLHttpRequest )
 
72
        {
 
73
            try
 
74
            {
 
75
                return new XMLHttpRequest();
 
76
            }
 
77
            catch ( e )
 
78
            {
 
79
                return false;
 
80
            }
 
81
        }
 
82
        else if ( window.ActiveXObject )
 
83
        {
 
84
            try
 
85
            {
 
86
                return new ActiveXObject( 'Msxml2.XMLHTTP' );
 
87
            }
 
88
            catch ( e )
 
89
            {
 
90
                try
 
91
                {
 
92
                    return new ActiveXObject( 'Microsoft.XMLHTTP' );
 
93
                }
 
94
                catch ( ee )
 
95
                {
 
96
                    return false;
 
97
                }
 
98
            }
 
99
        }
 
100
        
 
101
        return false;
 
102
    }
 
103
 
 
104
    function responseReceived()
 
105
    {
 
106
        if ( request.readyState == 4 )
 
107
        {
 
108
                switch( request.status )
 
109
                {
 
110
                case 200:
 
111
                if ( callbackSuccess )
 
112
                {
 
113
                    if ( responseType == 'TEXT' )
 
114
                    {
 
115
                        callbackSuccess( request.responseText );
 
116
                    }
 
117
                    else
 
118
                    {
 
119
                        var xml = textToXML( request.responseText, rootElementName );
 
120
 
 
121
                        callbackSuccess( xml );
 
122
                    }
 
123
                }
 
124
                break;
 
125
            case 204:
 
126
                if ( callbackSuccess )
 
127
                {
 
128
                    callbackSuccess( null );
 
129
                }
 
130
                break;
 
131
            case 500:
 
132
                var message = 'Operation failed - internal server error';
 
133
                
 
134
                var serverMessage = request.responseText;
 
135
 
 
136
                if ( serverMessage )
 
137
                {
 
138
                    var maxLength = 512;
 
139
                    
 
140
                    if ( serverMessage.length > maxLength )
 
141
                    {
 
142
                        serverMessage = serverMessage.substring( 0, maxLength - 3 ) + '...';
 
143
                    }
 
144
                    
 
145
                    if ( serverMessage.length > 0 )
 
146
                    {
 
147
                        message += '\n\n' + serverMessage;
 
148
                    }
 
149
                }
 
150
 
 
151
                message += '\n\nThe error details are logged';
 
152
 
 
153
                window.alert( message );
 
154
 
 
155
                break;
 
156
            default:
 
157
                if ( callbackError )
 
158
                {
 
159
                    callbackError( request.status );
 
160
                }
 
161
            }
 
162
        }
 
163
    }
 
164
 
 
165
    function textToXML( text, rootElementName )
 
166
    {
 
167
        var docImpl = document.implementation;
 
168
        var parser, dom;
 
169
 
 
170
        // For standards compliant browsers
 
171
        if ( docImpl && docImpl.createLSParser )
 
172
        {
 
173
            parser = docImpl.createLSParser( docImpl.MODE_SYNCHRONOUS, null );
 
174
            var input = docImpl.createLSInput();
 
175
            input.stringData = text;
 
176
            return parser.parse( input ).documentElement;
 
177
        }
 
178
 
 
179
        // For IE
 
180
        else if ( window.ActiveXObject )
 
181
        {
 
182
            dom = new ActiveXObject( 'Microsoft.XMLDOM' );
 
183
            dom.async = "false";
 
184
            dom.loadXML( text );
 
185
            return dom.getElementsByTagName( rootElementName )[0];
 
186
        }
 
187
 
 
188
        // For Mozilla
 
189
        else if ( window.DOMParser )
 
190
        {
 
191
            parser = new DOMParser();
 
192
            dom = parser.parseFromString( text, 'application\/xml' );
 
193
            return dom.documentElement;
 
194
        }
 
195
 
 
196
        // No parsing abilities
 
197
        return null;
 
198
    }
 
199
}