Use jquery with native transport support

The jquery mainline is lagging on support for responseType:
'arraybuffer', an XHRHTTPRequest Level 2 feature (whatever that means).
We use this responseType to transfer attachments.

I rebased https://github.com/jquery/jquery/pull/1525 on the 2.1.1
release and cut 2.1.1-ajax-nativetransport in my own fork.
This commit is contained in:
lilia 2014-10-30 01:27:57 -07:00
parent 800e5ab703
commit e156c2c0dd
3 changed files with 77 additions and 33 deletions

View file

@ -8,16 +8,30 @@
"backbone": "~1.1.2", "backbone": "~1.1.2",
"underscore": "~1.7.0", "underscore": "~1.7.0",
"protobuf": "~3.8.0", "protobuf": "~3.8.0",
"jquery": "~2.1.1", "bootstrap": "~3.3.0",
"bootstrap": "~3.3.0" "jquery": "liliakai/jquery#2.1.1-ajax-nativetransport"
}, },
"preen": { "preen": {
"jquery": ["dist/jquery.js"], "jquery": [
"long": ["dist/Long.js"], "dist/jquery.js"
"bytebuffer": ["dist/ByteBufferAB.js"], ],
"protobuf": ["dist/ProtoBuf.js"], "long": [
"underscore": ["underscore.js"], "dist/Long.js"
"backbone": ["backbone.js"], ],
"bootstrap": ["dist/css/bootstrap.css"] "bytebuffer": [
"dist/ByteBufferAB.js"
],
"protobuf": [
"dist/ProtoBuf.js"
],
"underscore": [
"underscore.js"
],
"backbone": [
"backbone.js"
],
"bootstrap": [
"dist/css/bootstrap.css"
]
} }
} }

View file

@ -1,5 +1,5 @@
/*! /*!
* jQuery JavaScript Library v2.1.1 * jQuery JavaScript Library v2.1.1-pre
* http://jquery.com/ * http://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
@ -9,7 +9,7 @@
* Released under the MIT license * Released under the MIT license
* http://jquery.org/license * http://jquery.org/license
* *
* Date: 2014-05-01T17:11Z * Date: 2014-10-30T07:56Z
*/ */
(function( global, factory ) { (function( global, factory ) {
@ -67,7 +67,7 @@ var
// Use the correct document accordingly with window argument (sandbox) // Use the correct document accordingly with window argument (sandbox)
document = window.document, document = window.document,
version = "2.1.1", version = "2.1.1-pre",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
@ -7842,7 +7842,8 @@ jQuery.extend({
responseFields: { responseFields: {
xml: "responseXML", xml: "responseXML",
text: "responseText", text: "responseText",
json: "responseJSON" json: "responseJSON",
native: "responseNative"
}, },
// Data converters // Data converters
@ -7859,7 +7860,10 @@ jQuery.extend({
"text json": jQuery.parseJSON, "text json": jQuery.parseJSON,
// Parse text as xml // Parse text as xml
"text xml": jQuery.parseXML "text xml": jQuery.parseXML,
// Don't convert a native response
"* native": true
}, },
// For options that shouldn't be deep extended: // For options that shouldn't be deep extended:
@ -8549,7 +8553,8 @@ jQuery.ajaxTransport(function( options ) {
send: function( headers, complete ) { send: function( headers, complete ) {
var i, var i,
xhr = options.xhr(), xhr = options.xhr(),
id = ++xhrId; id = ++xhrId,
responses = {};
xhr.open( options.type, options.url, options.async, options.username, options.password ); xhr.open( options.type, options.url, options.async, options.username, options.password );
@ -8595,15 +8600,25 @@ jQuery.ajaxTransport(function( options ) {
xhr.statusText xhr.statusText
); );
} else { } else {
// Verify the responseType attribute to avoid InvalidStateError Exception (XHR2 Spec)
// Support: IE9
// Accessing binary-data responseText throws an exception
// (#11426)
if ( (!xhr.responseType || xhr.responseType === "text") &&
typeof xhr.responseText === "string" ) {
responses.text = xhr.responseText;
}
// The native response associated with the responseType
// Stored in the xhr.response attribute (XHR2 Spec)
if ( xhr.response ) {
responses.native = xhr.response;
}
complete( complete(
xhrSuccessStatus[ xhr.status ] || xhr.status, xhrSuccessStatus[ xhr.status ] || xhr.status,
xhr.statusText, xhr.statusText,
// Support: IE9 responses,
// Accessing binary-data responseText throws an exception
// (#11426)
typeof xhr.responseText === "string" ? {
text: xhr.responseText
} : undefined,
xhr.getAllResponseHeaders() xhr.getAllResponseHeaders()
); );
} }

View file

@ -1,5 +1,5 @@
/*! /*!
* jQuery JavaScript Library v2.1.1 * jQuery JavaScript Library v2.1.1-pre
* http://jquery.com/ * http://jquery.com/
* *
* Includes Sizzle.js * Includes Sizzle.js
@ -9,7 +9,7 @@
* Released under the MIT license * Released under the MIT license
* http://jquery.org/license * http://jquery.org/license
* *
* Date: 2014-05-01T17:11Z * Date: 2014-10-30T07:56Z
*/ */
(function( global, factory ) { (function( global, factory ) {
@ -67,7 +67,7 @@ var
// Use the correct document accordingly with window argument (sandbox) // Use the correct document accordingly with window argument (sandbox)
document = window.document, document = window.document,
version = "2.1.1", version = "2.1.1-pre",
// Define a local copy of jQuery // Define a local copy of jQuery
jQuery = function( selector, context ) { jQuery = function( selector, context ) {
@ -7842,7 +7842,8 @@ jQuery.extend({
responseFields: { responseFields: {
xml: "responseXML", xml: "responseXML",
text: "responseText", text: "responseText",
json: "responseJSON" json: "responseJSON",
native: "responseNative"
}, },
// Data converters // Data converters
@ -7859,7 +7860,10 @@ jQuery.extend({
"text json": jQuery.parseJSON, "text json": jQuery.parseJSON,
// Parse text as xml // Parse text as xml
"text xml": jQuery.parseXML "text xml": jQuery.parseXML,
// Don't convert a native response
"* native": true
}, },
// For options that shouldn't be deep extended: // For options that shouldn't be deep extended:
@ -8549,7 +8553,8 @@ jQuery.ajaxTransport(function( options ) {
send: function( headers, complete ) { send: function( headers, complete ) {
var i, var i,
xhr = options.xhr(), xhr = options.xhr(),
id = ++xhrId; id = ++xhrId,
responses = {};
xhr.open( options.type, options.url, options.async, options.username, options.password ); xhr.open( options.type, options.url, options.async, options.username, options.password );
@ -8595,15 +8600,25 @@ jQuery.ajaxTransport(function( options ) {
xhr.statusText xhr.statusText
); );
} else { } else {
// Verify the responseType attribute to avoid InvalidStateError Exception (XHR2 Spec)
// Support: IE9
// Accessing binary-data responseText throws an exception
// (#11426)
if ( (!xhr.responseType || xhr.responseType === "text") &&
typeof xhr.responseText === "string" ) {
responses.text = xhr.responseText;
}
// The native response associated with the responseType
// Stored in the xhr.response attribute (XHR2 Spec)
if ( xhr.response ) {
responses.native = xhr.response;
}
complete( complete(
xhrSuccessStatus[ xhr.status ] || xhr.status, xhrSuccessStatus[ xhr.status ] || xhr.status,
xhr.statusText, xhr.statusText,
// Support: IE9 responses,
// Accessing binary-data responseText throws an exception
// (#11426)
typeof xhr.responseText === "string" ? {
text: xhr.responseText
} : undefined,
xhr.getAllResponseHeaders() xhr.getAllResponseHeaders()
); );
} }