diff options
| author | Di Peng | 2011-08-02 16:44:25 -0700 | 
|---|---|---|
| committer | Igor Minar | 2011-08-18 23:33:32 -0700 | 
| commit | 05e2c3196c857402a9aa93837b565e0a2736af23 (patch) | |
| tree | 4a96c6c3634db4e6f03f05dcb478438b41a17845 /src | |
| parent | 718ebf1fcf1a3f916819382125e1225e1d2e38ee (diff) | |
| download | angular.js-05e2c3196c857402a9aa93837b565e0a2736af23.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')
| -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 815b6b24..a53687d5 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; | 
