| 170 | | for (var i = 0; i < this.responders.length; i++){ |
|---|
| 171 | | if (responderToAdd == this.responders[i]){ |
|---|
| 172 | | return; |
|---|
| 173 | | } |
|---|
| 174 | | } |
|---|
| 175 | | this.responders.push(responderToAdd); |
|---|
| | 170 | for (var i = 0; i < this.responders.length; i++){ |
|---|
| | 171 | if (responderToAdd == this.responders[i]){ |
|---|
| | 172 | return; |
|---|
| | 173 | } |
|---|
| | 174 | } |
|---|
| | 175 | this.responders.push(responderToAdd); |
|---|
| | 176 | }, |
|---|
| | 177 | |
|---|
| | 178 | /** |
|---|
| | 179 | * Method: unregister |
|---|
| | 180 | * |
|---|
| | 181 | * Parameters: |
|---|
| | 182 | * responderToRemove - {?} |
|---|
| | 183 | */ |
|---|
| | 184 | unregister: function(responderToRemove) { |
|---|
| | 185 | OpenLayers.Util.removeItem(this.reponders, responderToRemove); |
|---|
| 239 | | }, |
|---|
| 240 | | |
|---|
| 241 | | /** |
|---|
| 242 | | * Function: responseIsSuccess |
|---|
| 243 | | * |
|---|
| 244 | | * Returns: |
|---|
| 245 | | * {Boolean} |
|---|
| 246 | | */ |
|---|
| 247 | | responseIsSuccess: function() { |
|---|
| 248 | | return this.transport.status == undefined || |
|---|
| 249 | | this.transport.status == 0 || |
|---|
| 250 | | (this.transport.status >= 200 && this.transport.status < 300); |
|---|
| 251 | | }, |
|---|
| 252 | | |
|---|
| 253 | | /** |
|---|
| 254 | | * Function: responseIsFailure |
|---|
| 255 | | * |
|---|
| 256 | | * Returns: |
|---|
| 257 | | * {Boolean} |
|---|
| 258 | | */ |
|---|
| 259 | | responseIsFailure: function() { |
|---|
| 260 | | return !this.responseIsSuccess(); |
|---|
| | 248 | |
|---|
| | 249 | this.options.method = this.options.method.toLowerCase(); |
|---|
| | 250 | |
|---|
| | 251 | if (typeof this.options.parameters == 'string') { |
|---|
| | 252 | this.options.parameters = |
|---|
| | 253 | OpenLayers.Util.getParameters(this.options.parameters); |
|---|
| | 254 | } |
|---|
| 293 | | var parameters = this.options.parameters || ''; |
|---|
| 294 | | if (parameters.length > 0) { |
|---|
| 295 | | parameters += '&_='; |
|---|
| | 294 | this.url = url; |
|---|
| | 295 | this.method = this.options.method; |
|---|
| | 296 | var params = OpenLayers.Util.extend({}, this.options.parameters); |
|---|
| | 297 | |
|---|
| | 298 | if (this.method != 'get' && this.method != 'post') { |
|---|
| | 299 | // simulate other verbs over post |
|---|
| | 300 | params['_method'] = this.method; |
|---|
| | 301 | this.method = 'post'; |
|---|
| | 302 | } |
|---|
| | 303 | |
|---|
| | 304 | this.parameters = params; |
|---|
| | 305 | |
|---|
| | 306 | if (params = OpenLayers.Util.getParameterString(params)) { |
|---|
| | 307 | // when GET, append parameters to URL |
|---|
| | 308 | if (this.method == 'get') { |
|---|
| | 309 | this.url += ((this.url.indexOf('?') > -1) ? '&' : '?') + params; |
|---|
| | 310 | } else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { |
|---|
| | 311 | params += '&_='; |
|---|
| | 312 | } |
|---|
| 336 | | |
|---|
| 337 | | /** |
|---|
| 338 | | * Method: setRequestHeaders |
|---|
| 339 | | */ |
|---|
| 340 | | setRequestHeaders: function() { |
|---|
| 341 | | var requestHeaders = [ |
|---|
| 342 | | 'X-Requested-With', |
|---|
| 343 | | 'XMLHttpRequest', |
|---|
| 344 | | 'X-Prototype-Version', |
|---|
| 345 | | 'OpenLayers' |
|---|
| 346 | | ]; |
|---|
| 347 | | |
|---|
| 348 | | if (this.options.method == 'post' && !this.options.postBody) { |
|---|
| 349 | | requestHeaders.push('Content-type', |
|---|
| 350 | | 'application/x-www-form-urlencoded'); |
|---|
| 351 | | |
|---|
| 352 | | // Force "Connection: close" for Mozilla browsers to work around |
|---|
| 353 | | // a bug where XMLHttpReqeuest sends an incorrect Content-length |
|---|
| 354 | | // header. See Mozilla Bugzilla #246651. |
|---|
| 355 | | if (this.transport.overrideMimeType) { |
|---|
| 356 | | requestHeaders.push('Connection', 'close'); |
|---|
| 357 | | } |
|---|
| 358 | | } |
|---|
| 359 | | |
|---|
| 360 | | if (this.options.requestHeaders) { |
|---|
| 361 | | requestHeaders.push.apply(requestHeaders, |
|---|
| 362 | | this.options.requestHeaders); |
|---|
| 363 | | } |
|---|
| 364 | | |
|---|
| 365 | | for (var i = 0; i < requestHeaders.length; i += 2) { |
|---|
| 366 | | this.transport.setRequestHeader(requestHeaders[i], |
|---|
| 367 | | requestHeaders[i+1]); |
|---|
| 368 | | } |
|---|
| 369 | | }, |
|---|
| 376 | | if (readyState != 1) { |
|---|
| 377 | | this.respondToReadyState(this.transport.readyState); |
|---|
| 378 | | } |
|---|
| 379 | | }, |
|---|
| 380 | | |
|---|
| 381 | | /** |
|---|
| 382 | | * Method: header |
|---|
| 383 | | * |
|---|
| | 357 | if (readyState > 1 && !((readyState == 4) && this._complete)) { |
|---|
| | 358 | this.respondToReadyState(this.transport.readyState); |
|---|
| | 359 | } |
|---|
| | 360 | }, |
|---|
| | 361 | |
|---|
| | 362 | /** |
|---|
| | 363 | * Method: setRequestHeaders |
|---|
| | 364 | */ |
|---|
| | 365 | setRequestHeaders: function() { |
|---|
| | 366 | var headers = { |
|---|
| | 367 | 'X-Requested-With': 'XMLHttpRequest', |
|---|
| | 368 | 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*', |
|---|
| | 369 | 'OpenLayers': true |
|---|
| | 370 | }; |
|---|
| | 371 | |
|---|
| | 372 | if (this.method == 'post') { |
|---|
| | 373 | headers['Content-type'] = this.options.contentType + |
|---|
| | 374 | (this.options.encoding ? '; charset=' + this.options.encoding : ''); |
|---|
| | 375 | |
|---|
| | 376 | /* Force "Connection: close" for older Mozilla browsers to work |
|---|
| | 377 | * around a bug where XMLHttpRequest sends an incorrect |
|---|
| | 378 | * Content-length header. See Mozilla Bugzilla #246651. |
|---|
| | 379 | */ |
|---|
| | 380 | if (this.transport.overrideMimeType && |
|---|
| | 381 | (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) { |
|---|
| | 382 | headers['Connection'] = 'close'; |
|---|
| | 383 | } |
|---|
| | 384 | } |
|---|
| | 385 | // user-defined headers |
|---|
| | 386 | if (typeof this.options.requestHeaders == 'object') { |
|---|
| | 387 | var extras = this.options.requestHeaders; |
|---|
| | 388 | |
|---|
| | 389 | if (typeof extra.push == 'function') { |
|---|
| | 390 | for (var i = 0, length = extras.length; i < length; i += 2) { |
|---|
| | 391 | headers[extras[i]] = extras[i+1]; |
|---|
| | 392 | } |
|---|
| | 393 | } else { |
|---|
| | 394 | for (var i in extras) { |
|---|
| | 395 | headers[i] = pair[i]; |
|---|
| | 396 | } |
|---|
| | 397 | } |
|---|
| | 398 | } |
|---|
| | 399 | |
|---|
| | 400 | for (var name in headers) { |
|---|
| | 401 | this.transport.setRequestHeader(name, headers[name]); |
|---|
| | 402 | } |
|---|
| | 403 | }, |
|---|
| | 404 | |
|---|
| | 405 | /** |
|---|
| | 406 | * Method: success |
|---|
| | 407 | * |
|---|
| 385 | | * {?} |
|---|
| 386 | | */ |
|---|
| 387 | | header: function(name) { |
|---|
| | 409 | * {Boolean} - |
|---|
| | 410 | */ |
|---|
| | 411 | success: function() { |
|---|
| | 412 | var status = this.getStatus(); |
|---|
| | 413 | return !status || (status >=200 && status < 300); |
|---|
| | 414 | }, |
|---|
| | 415 | |
|---|
| | 416 | /** |
|---|
| | 417 | * Method: getStatus |
|---|
| | 418 | * |
|---|
| | 419 | * Returns: |
|---|
| | 420 | * {Integer} - Status |
|---|
| | 421 | */ |
|---|
| | 422 | getStatus: function() { |
|---|
| | 423 | try { |
|---|
| | 424 | return this.transport.status || 0; |
|---|
| | 425 | } catch (e) { |
|---|
| | 426 | return 0 |
|---|
| | 427 | } |
|---|
| | 428 | }, |
|---|
| | 429 | |
|---|
| | 430 | /** |
|---|
| | 431 | * Method: respondToReadyState |
|---|
| | 432 | * |
|---|
| | 433 | * Parameters: |
|---|
| | 434 | * readyState - {?} |
|---|
| | 435 | */ |
|---|
| | 436 | respondToReadyState: function(readyState) { |
|---|
| | 437 | var state = OpenLayers.Ajax.Request.Events[readyState]; |
|---|
| | 438 | var response = new OpenLayers.Ajax.Response(this); |
|---|
| | 439 | |
|---|
| | 440 | if (state == 'Complete') { |
|---|
| | 441 | try { |
|---|
| | 442 | this._complete = true; |
|---|
| | 443 | (this.options['on' + response.status] || |
|---|
| | 444 | this.options['on' + (this.success() ? 'Success' : 'Failure')] || |
|---|
| | 445 | OpenLayers.Ajax.emptyFunction)(response); |
|---|
| | 446 | } catch (e) { |
|---|
| | 447 | this.dispatchException(e); |
|---|
| | 448 | } |
|---|
| | 449 | |
|---|
| | 450 | var contentType = response.getHeader('Content-type'); |
|---|
| | 451 | } |
|---|
| | 452 | |
|---|
| | 453 | try { |
|---|
| | 454 | (this.options['on' + state] || |
|---|
| | 455 | OpenLayers.Ajax.emptyFunction)(response); |
|---|
| | 456 | OpenLayers.Ajax.Responders.dispatch('on' + state, |
|---|
| | 457 | this, |
|---|
| | 458 | response); |
|---|
| | 459 | } catch (e) { |
|---|
| | 460 | this.dispatchException(e); |
|---|
| | 461 | } |
|---|
| | 462 | |
|---|
| | 463 | if (state == 'Complete') { |
|---|
| | 464 | // avoid memory leak in MSIE: clean up |
|---|
| | 465 | this.transport.onreadystatechange = OpenLayers.Ajax.emptyFunction; |
|---|
| | 466 | } |
|---|
| | 467 | }, |
|---|
| | 468 | |
|---|
| | 469 | /** |
|---|
| | 470 | * Method: getHeader |
|---|
| | 471 | * |
|---|
| | 472 | * Parameters: |
|---|
| | 473 | * name - {String} Header name |
|---|
| | 474 | * |
|---|
| | 475 | * Returns: |
|---|
| | 476 | * {?} - response header for the given name |
|---|
| | 477 | */ |
|---|
| | 478 | getHeader: function(name) { |
|---|
| 415 | | this.dispatchException(e); |
|---|
| 416 | | } |
|---|
| 417 | | }, |
|---|
| 418 | | |
|---|
| 419 | | /** |
|---|
| 420 | | * Method: respondToReadyState |
|---|
| 421 | | * |
|---|
| 422 | | * Parameters: |
|---|
| 423 | | * readyState - {?} |
|---|
| 424 | | */ |
|---|
| 425 | | respondToReadyState: function(readyState) { |
|---|
| 426 | | var event = OpenLayers.Ajax.Request.Events[readyState]; |
|---|
| 427 | | var transport = this.transport, json = this.evalJSON(); |
|---|
| 428 | | |
|---|
| 429 | | if (event == 'Complete') { |
|---|
| 430 | | try { |
|---|
| 431 | | var responseSuccess = this.responseIsSuccess() ? 'Success' |
|---|
| 432 | | : 'Failure'; |
|---|
| 433 | | |
|---|
| 434 | | (this.options['on' + this.transport.status] || |
|---|
| 435 | | this.options['on' + responseSuccess] || |
|---|
| 436 | | OpenLayers.Ajax.emptyFunction)(transport, json); |
|---|
| 437 | | } catch (e) { |
|---|
| 438 | | this.dispatchException(e); |
|---|
| 439 | | } |
|---|
| 440 | | |
|---|
| 441 | | var contentType = this.header('Content-type') || ''; |
|---|
| 442 | | if (contentType.match(/^text\/javascript/i)) { |
|---|
| 443 | | this.evalResponse(); |
|---|
| 444 | | } |
|---|
| 445 | | } |
|---|
| 446 | | |
|---|
| 447 | | try { |
|---|
| 448 | | (this.options['on' + event] || |
|---|
| 449 | | OpenLayers.Ajax.emptyFunction)(transport, json); |
|---|
| 450 | | OpenLayers.Ajax.Responders.dispatch('on' + event, |
|---|
| 451 | | this, |
|---|
| 452 | | transport, |
|---|
| 453 | | json); |
|---|
| 454 | | } catch (e) { |
|---|
| 455 | | this.dispatchException(e); |
|---|
| 456 | | } |
|---|
| 457 | | |
|---|
| 458 | | // Avoid memory leak in MSIE: clean up the oncomplete event handler |
|---|
| 459 | | if (event == 'Complete') { |
|---|
| 460 | | this.transport.onreadystatechange = OpenLayers.Ajax.emptyFunction; |
|---|
| | 482 | return null |
|---|
| | 505 | |
|---|
| | 506 | /** |
|---|
| | 507 | * Class: OpenLayers.Ajax.Request |
|---|
| | 508 | * |
|---|
| | 509 | * Inherit: |
|---|
| | 510 | * - <OpenLayers.Ajax.Base> |
|---|
| | 511 | */ |
|---|
| | 512 | OpenLayers.Ajax.Response = OpenLayers.Class({ |
|---|
| | 513 | |
|---|
| | 514 | /** |
|---|
| | 515 | * Property: status |
|---|
| | 516 | * |
|---|
| | 517 | * {Integer} |
|---|
| | 518 | */ |
|---|
| | 519 | status: 0, |
|---|
| | 520 | |
|---|
| | 521 | |
|---|
| | 522 | /** |
|---|
| | 523 | * Property: statusText |
|---|
| | 524 | * |
|---|
| | 525 | * {String} |
|---|
| | 526 | */ |
|---|
| | 527 | statusText: '', |
|---|
| | 528 | |
|---|
| | 529 | /** |
|---|
| | 530 | * Constructor: OpenLayers.Ajax.Response |
|---|
| | 531 | * |
|---|
| | 532 | * Parameters: |
|---|
| | 533 | * request - {Object} |
|---|
| | 534 | */ |
|---|
| | 535 | initialize: function(request) { |
|---|
| | 536 | this.request = request; |
|---|
| | 537 | var transport = this.transport = request.transport, |
|---|
| | 538 | readyState = this.readyState = transport.readyState; |
|---|
| | 539 | |
|---|
| | 540 | if ((readyState > 2 && |
|---|
| | 541 | !(!!(window.attachEvent && !window.opera))) || |
|---|
| | 542 | readyState == 4) { |
|---|
| | 543 | this.status = this.getStatus(); |
|---|
| | 544 | this.statusText = this.getStatusText(); |
|---|
| | 545 | this.responseText = transport.responseText == null ? |
|---|
| | 546 | '' : String(transport.responseText); |
|---|
| | 547 | } |
|---|
| | 548 | |
|---|
| | 549 | if(readyState == 4) { |
|---|
| | 550 | var xml = transport.responseXML; |
|---|
| | 551 | this.responseXML = xml === undefined ? null : xml; |
|---|
| | 552 | } |
|---|
| | 553 | }, |
|---|
| | 554 | |
|---|
| | 555 | /** |
|---|
| | 556 | * Method: getStatus |
|---|
| | 557 | */ |
|---|
| | 558 | getStatus: OpenLayers.Ajax.Request.prototype.getStatus, |
|---|
| | 559 | |
|---|
| | 560 | /** |
|---|
| | 561 | * Method: getStatustext |
|---|
| | 562 | * |
|---|
| | 563 | * Returns: |
|---|
| | 564 | * {String} - statusText |
|---|
| | 565 | */ |
|---|
| | 566 | getStatusText: function() { |
|---|
| | 567 | try { |
|---|
| | 568 | return this.transport.statusText || ''; |
|---|
| | 569 | } catch (e) { |
|---|
| | 570 | return ''; |
|---|
| | 571 | } |
|---|
| | 572 | }, |
|---|
| | 573 | |
|---|
| | 574 | /** |
|---|
| | 575 | * Method: getHeader |
|---|
| | 576 | */ |
|---|
| | 577 | getHeader: OpenLayers.Ajax.Request.prototype.getHeader, |
|---|
| | 578 | |
|---|
| | 579 | /** |
|---|
| | 580 | * Method: getResponseHeader |
|---|
| | 581 | * |
|---|
| | 582 | * Returns: |
|---|
| | 583 | * {?} - response header for given name |
|---|
| | 584 | */ |
|---|
| | 585 | getResponseHeader: function(name) { |
|---|
| | 586 | return this.transport.getResponseHeader(name); |
|---|
| | 587 | } |
|---|
| | 588 | }); |
|---|
| | 589 | |
|---|