diff options
| author | Di Peng | 2011-08-02 16:44:25 -0700 |
|---|---|---|
| committer | Igor Minar | 2011-08-06 01:54:05 -0700 |
| commit | 6f8904e027651504107a6311ddc6b5f78df02d7a (patch) | |
| tree | 1d563e178a3638e24f04f0c88efd985fb6785182 /src/Browser.js | |
| parent | 4dc9e6416a465eb7e8ffaa34997500fec6324aa2 (diff) | |
| download | angular.js-6f8904e027651504107a6311ddc6b5f78df02d7a.tar.bz2 | |
feat($browser): JSONP error handling
since we don't know if the error was due to a client error (4xx) or
server error (5xx), we leave the status code as undefined.
Diffstat (limited to 'src/Browser.js')
| -rw-r--r-- | src/Browser.js | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/Browser.js b/src/Browser.js index 562b137d..937099f4 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -100,12 +100,19 @@ function Browser(window, document, body, XHR, $log) { outstandingRequestCount ++; if (lowercase(method) == 'json') { var callbackId = ("angular_" + Math.random() + '_' + (idCounter++)).replace(/\d\./, ''); - var script = self.addJs(url.replace('JSON_CALLBACK', callbackId)); - window[callbackId] = function(data){ + window[callbackId] = function(data) { + window[callbackId].data = data; + }; + + var script = self.addJs(url.replace('JSON_CALLBACK', callbackId), null, function() { + if (window[callbackId].data) { + completeOutstandingRequest(callback, 200, window[callbackId].data); + } else { + completeOutstandingRequest(callback); + } delete window[callbackId]; body[0].removeChild(script); - completeOutstandingRequest(callback, 200, data); - }; + }); } else { var xhr = new XHR(); xhr.open(method, url, true); @@ -452,7 +459,7 @@ function Browser(window, document, body, XHR, $log) { * @description * Adds a script tag to the head. */ - self.addJs = function(url, domId) { + self.addJs = function(url, domId, 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 @@ -465,6 +472,15 @@ function Browser(window, document, body, XHR, $log) { script.type = 'text/javascript'; script.src = url; if (domId) script.id = domId; + + if (msie) { + script.onreadystatechange = function() { + /loaded|complete/.test(script.readyState) && done && done(); + } + } else { + if (done) script.onload = script.onerror = done; + } + body[0].appendChild(script); return script; |
