aboutsummaryrefslogtreecommitdiffstats
path: root/src/service/httpBackend.js
diff options
context:
space:
mode:
authorIgor Minar2011-12-07 07:53:57 -0800
committerIgor Minar2011-12-07 07:54:09 -0800
commitfd38655e6c8e58e7c7325b2a5937b26174ebdefa (patch)
tree03921a8a9dc94fe3f5c2752ea84e05682da3b89f /src/service/httpBackend.js
parentb9001e914740ea0e3bba357a33ddaf13610c874f (diff)
downloadangular.js-fd38655e6c8e58e7c7325b2a5937b26174ebdefa.tar.bz2
fix(): use angular.callbacks namespace for jsonp callbacks
Previously we used to put callbacks on the window object, but that causes problems on IE8 where it is not possible to delete properties from the window object
Diffstat (limited to 'src/service/httpBackend.js')
-rw-r--r--src/service/httpBackend.js20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/service/httpBackend.js b/src/service/httpBackend.js
index 7443347f..6ea7df0f 100644
--- a/src/service/httpBackend.js
+++ b/src/service/httpBackend.js
@@ -17,31 +17,29 @@ var XHR = window.XMLHttpRequest || function() {
*/
function $HttpBackendProvider() {
this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
- return createHttpBackend($browser, XHR, $browser.defer, $window, $document[0].body,
- $window.location.href.replace(':', ''));
+ return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks,
+ $document[0].body, $window.location.href.replace(':', ''));
}];
}
-function createHttpBackend($browser, XHR, $browserDefer, $window, body, locationProtocol) {
- var idCounter = 0;
-
+function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locationProtocol) {
// TODO(vojta): fix the signature
return function(method, url, post, callback, headers, timeout) {
$browser.$$incOutstandingRequestCount();
if (lowercase(method) == 'jsonp') {
- var callbackId = ('angular_' + Math.random() + '_' + (idCounter++)).replace(/\d\./, '');
- $window[callbackId] = function(data) {
- $window[callbackId].data = data;
+ var callbackId = '_' + (callbacks.counter++).toString(36);
+ callbacks[callbackId] = function(data) {
+ callbacks[callbackId].data = data;
};
var script = $browser.addJs(url.replace('JSON_CALLBACK', callbackId), null, function() {
- if ($window[callbackId].data) {
- completeRequest(callback, 200, $window[callbackId].data);
+ if (callbacks[callbackId].data) {
+ completeRequest(callback, 200, callbacks[callbackId].data);
} else {
completeRequest(callback, -2);
}
- delete $window[callbackId];
+ delete callbacks[callbackId];
body.removeChild(script);
});
} else {