/*! * jQuery-ajaxTransport-XDomainRequest - v1.0.4 - 2015-03-05 * https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest * Copyright (c) 2015 Jason Moon (@JSONMOON) * Licensed MIT (/blob/master/LICENSE.txt) */ (function(factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as anonymous module. define(['jquery'], factory); } else if (typeof exports === 'object') { // CommonJS module.exports = factory(require('jquery')); } else { // Browser globals. factory(jQuery); } }(function($) { // Only continue if we're on IE8/IE9 with jQuery 1.5+ (contains the ajaxTransport function) if ($.support.cors || !$.ajaxTransport || !window.XDomainRequest) { return $; } var httpRegEx = /^(https?:)?\/\//i; var getOrPostRegEx = /^get|post$/i; var sameSchemeRegEx = new RegExp('^(\/\/|' + location.protocol + ')', 'i'); // ajaxTransport exists in jQuery 1.5+ $.ajaxTransport('* text html xml json', function(options, userOptions, jqXHR) { // Only continue if the request is: asynchronous, uses GET or POST method, has HTTP or HTTPS protocol, and has the same scheme as the calling page if (!options.crossDomain || !options.async || !getOrPostRegEx.test(options.type) || !httpRegEx.test(options.url) || !sameSchemeRegEx.test(options.url)) { return; } var xdr = null; return { send: function(headers, complete) { var postData = ''; var userType = (userOptions.dataType || '').toLowerCase(); xdr = new XDomainRequest(); if (/^\d+$/.test(userOptions.timeout)) { xdr.timeout = userOptions.timeout; } xdr.ontimeout = function() { complete(500, 'timeout'); }; xdr.onload = function() { var allResponseHeaders = 'Content-Length: ' + xdr.responseText.length + '\r\nContent-Type: ' + xdr.contentType; var status = { code: 200, message: 'success' }; var responses = { text: xdr.responseText }; try { if (userType === 'html' || /text\/html/i.test(xdr.contentType)) { responses.html = xdr.responseText; } else if (userType === 'json' || (userType !== 'text' && /\/json/i.test(xdr.contentType))) { try { responses.json = $.parseJSON(xdr.responseText); } catch(e) { status.code = 500; status.message = 'parseerror'; //throw 'Invalid JSON: ' + xdr.responseText; } } else if (userType === 'xml' || (userType !== 'text' && /\/xml/i.test(xdr.contentType))) { var doc = new ActiveXObject('Microsoft.XMLDOM'); doc.async = false; try { doc.loadXML(xdr.responseText); } catch(e) { doc = undefined; } if (!doc || !doc.documentElement || doc.getElementsByTagName('parsererror').length) { status.code = 500; status.message = 'parseerror'; throw 'Invalid XML: ' + xdr.responseText; } responses.xml = doc; } } catch(parseMessage) { throw parseMessage; } finally { complete(status.code, status.message, responses, allResponseHeaders); } }; // set an empty handler for 'onprogress' so requests don't get aborted xdr.onprogress = function(){}; xdr.onerror = function() { complete(500, 'error', { text: xdr.responseText }); }; if (userOptions.data) { postData = ($.type(userOptions.data) === 'string') ? userOptions.data : $.param(userOptions.data); } xdr.open(options.type, options.url); xdr.send(postData); }, abort: function() { if (xdr) { xdr.abort(); } } }; }); return $; }));