aboutsummaryrefslogtreecommitdiffstats
path: root/src/service
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
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')
-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 {