in OpenLayers.Request call the "complete", "success" and "failure" callbacks from within a separate method, this allows executing the callbacks from outside and at the time it lmakes the most sense to the application, p=fvanderbiest, r=me (closes #2218)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@9621 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -141,6 +141,54 @@ OpenLayers.Request = {
|
||||
request.setRequestHeader(header, config.headers[header]);
|
||||
}
|
||||
|
||||
var events = this.events;
|
||||
|
||||
// we want to execute runCallbacks with "this" as the
|
||||
// execution scope
|
||||
var self = this;
|
||||
|
||||
request.onreadystatechange = function() {
|
||||
if(request.readyState == OpenLayers.Request.XMLHttpRequest.DONE) {
|
||||
var proceed = events.triggerEvent(
|
||||
"complete",
|
||||
{request: request, config: config, requestUrl: url}
|
||||
);
|
||||
if(proceed !== false) {
|
||||
self.runCallbacks(
|
||||
{request: request, config: config, requestUrl: url}
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// send request (optionally with data) and return
|
||||
// call in a timeout for asynchronous requests so the return is
|
||||
// available before readyState == 4 for cached docs
|
||||
if(config.async === false) {
|
||||
request.send(config.data);
|
||||
} else {
|
||||
window.setTimeout(function(){
|
||||
request.send(config.data);
|
||||
}, 0);
|
||||
}
|
||||
return request;
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: runCallbacks
|
||||
* Calls the complete, success and failure callbacks. Application
|
||||
* can listen to the "complete" event, have the listener
|
||||
* display a confirm window and always return false, and
|
||||
* execute OpenLayers.Request.runCallbacks if the user
|
||||
* hits "yes" in the confirm window.
|
||||
*
|
||||
* Parameters:
|
||||
* options - {Object} Hash containing request, config and requestUrl keys
|
||||
*/
|
||||
runCallbacks: function(options) {
|
||||
var request = options.request;
|
||||
var config = options.config;
|
||||
|
||||
// bind callbacks to readyState 4 (done)
|
||||
var complete = (config.scope) ?
|
||||
OpenLayers.Function.bind(config.callback, config.scope) :
|
||||
@@ -161,50 +209,21 @@ OpenLayers.Request = {
|
||||
OpenLayers.Function.bind(config.failure, config.scope) :
|
||||
config.failure;
|
||||
}
|
||||
|
||||
var events = this.events;
|
||||
|
||||
request.onreadystatechange = function() {
|
||||
if(request.readyState == OpenLayers.Request.XMLHttpRequest.DONE) {
|
||||
var proceed = events.triggerEvent(
|
||||
"complete",
|
||||
{request: request, config: config, requestUrl: url}
|
||||
);
|
||||
if(proceed !== false) {
|
||||
complete(request);
|
||||
if (!request.status || (request.status >= 200 && request.status < 300)) {
|
||||
events.triggerEvent(
|
||||
"success",
|
||||
{request: request, config: config, requestUrl: url}
|
||||
);
|
||||
if(success) {
|
||||
success(request);
|
||||
}
|
||||
}
|
||||
if(request.status && (request.status < 200 || request.status >= 300)) {
|
||||
events.triggerEvent(
|
||||
"failure",
|
||||
{request: request, config: config, requestUrl: url}
|
||||
);
|
||||
if(failure) {
|
||||
failure(request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
complete(request);
|
||||
|
||||
if (!request.status || (request.status >= 200 && request.status < 300)) {
|
||||
this.events.triggerEvent("success", options);
|
||||
if(success) {
|
||||
success(request);
|
||||
}
|
||||
}
|
||||
if(request.status && (request.status < 200 || request.status >= 300)) {
|
||||
this.events.triggerEvent("failure", options);
|
||||
if(failure) {
|
||||
failure(request);
|
||||
}
|
||||
};
|
||||
|
||||
// send request (optionally with data) and return
|
||||
// call in a timeout for asynchronous requests so the return is
|
||||
// available before readyState == 4 for cached docs
|
||||
if(config.async === false) {
|
||||
request.send(config.data);
|
||||
} else {
|
||||
window.setTimeout(function(){
|
||||
request.send(config.data);
|
||||
}, 0);
|
||||
}
|
||||
return request;
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user