aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/httpBackend.js
diff options
context:
space:
mode:
authorIgor Minar2012-04-09 14:27:14 -0700
committerIgor Minar2012-04-09 17:59:47 -0700
commitfbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8 (patch)
treef67c6b8cf724431efead5197cced66dc2340f9f5 /src/ng/httpBackend.js
parent13d5528a5f5a2f0feee5c742788a914d2371841e (diff)
downloadangular.js-fbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8.tar.bz2
chore($browser): remove the addJs method
this was never meant to be a public api used by apps. I refactored the code to hide the functionality. BREAKING CHANGE: $browser.addJs method was removed apps that depended on this functionality should either use many of the existing script loaders or create a simple helper method specific to the app.
Diffstat (limited to 'src/ng/httpBackend.js')
-rw-r--r--src/ng/httpBackend.js31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js
index b2c14b3f..d2784efa 100644
--- a/src/ng/httpBackend.js
+++ b/src/ng/httpBackend.js
@@ -26,11 +26,11 @@ var XHR = window.XMLHttpRequest || function() {
function $HttpBackendProvider() {
this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks,
- $document[0].body, $window.location.protocol.replace(':', ''));
+ $document[0], $window.location.protocol.replace(':', ''));
}];
}
-function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locationProtocol) {
+function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) {
// TODO(vojta): fix the signature
return function(method, url, post, callback, headers, timeout, withCredentials) {
$browser.$$incOutstandingRequestCount();
@@ -42,7 +42,7 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati
callbacks[callbackId].data = data;
};
- var script = $browser.addJs(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
+ jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
function() {
if (callbacks[callbackId].data) {
completeRequest(callback, 200, callbacks[callbackId].data);
@@ -50,7 +50,6 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati
completeRequest(callback, -2);
}
delete callbacks[callbackId];
- body.removeChild(script);
});
} else {
var xhr = new XHR();
@@ -100,4 +99,28 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, body, locati
$browser.$$completeOutstandingRequest(noop);
}
};
+
+ function jsonpReq(url, done) {
+ // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:
+ // - fetches local scripts via XHR and evals them
+ // - adds and immediately removes script elements from the document
+ var script = rawDocument.createElement('script'),
+ doneWrapper = function() {
+ rawDocument.body.removeChild(script);
+ if (done) done();
+ }
+
+ script.type = 'text/javascript';
+ script.src = url;
+
+ if (msie) {
+ script.onreadystatechange = function() {
+ if (/loaded|complete/.test(script.readyState)) doneWrapper();
+ };
+ } else {
+ script.onload = script.onerror = doneWrapper;
+ }
+
+ rawDocument.body.appendChild(script);
+ };
}