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:
+61
-42
@@ -141,6 +141,54 @@ OpenLayers.Request = {
|
|||||||
request.setRequestHeader(header, config.headers[header]);
|
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)
|
// bind callbacks to readyState 4 (done)
|
||||||
var complete = (config.scope) ?
|
var complete = (config.scope) ?
|
||||||
OpenLayers.Function.bind(config.callback, config.scope) :
|
OpenLayers.Function.bind(config.callback, config.scope) :
|
||||||
@@ -161,50 +209,21 @@ OpenLayers.Request = {
|
|||||||
OpenLayers.Function.bind(config.failure, config.scope) :
|
OpenLayers.Function.bind(config.failure, config.scope) :
|
||||||
config.failure;
|
config.failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
var events = this.events;
|
complete(request);
|
||||||
|
|
||||||
request.onreadystatechange = function() {
|
if (!request.status || (request.status >= 200 && request.status < 300)) {
|
||||||
if(request.readyState == OpenLayers.Request.XMLHttpRequest.DONE) {
|
this.events.triggerEvent("success", options);
|
||||||
var proceed = events.triggerEvent(
|
if(success) {
|
||||||
"complete",
|
success(request);
|
||||||
{request: request, config: config, requestUrl: url}
|
}
|
||||||
);
|
}
|
||||||
if(proceed !== false) {
|
if(request.status && (request.status < 200 || request.status >= 300)) {
|
||||||
complete(request);
|
this.events.triggerEvent("failure", options);
|
||||||
if (!request.status || (request.status >= 200 && request.status < 300)) {
|
if(failure) {
|
||||||
events.triggerEvent(
|
failure(request);
|
||||||
"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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
// 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