From 06ee2c16f1c466a77fb25e07991e5adaa3385656 Mon Sep 17 00:00:00 2001 From: Oleg Date: Sun, 22 Dec 2013 08:53:19 +0400 Subject: [PATCH] Ajax: support non-RFC2616 methods for oldIE Closes gh-1466 Fixes #13240 --- src/ajax/xhr.js | 15 +++++++++++++-- test/unit/ajax.js | 11 +++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js index d747093d5..0f560f45a 100644 --- a/src/ajax/xhr.js +++ b/src/ajax/xhr.js @@ -8,9 +8,20 @@ define([ // (This is still attached to ajaxSettings for backward compatibility) jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ? // Support: IE6+ - // XHR cannot access local files, always use ActiveX for that case function() { - return !this.isLocal && createStandardXHR() || createActiveXHR(); + + // XHR cannot access local files, always use ActiveX for that case + return !this.isLocal && + + // Support: IE7-8 + // oldIE XHR does not support non-RFC2616 methods (#13240) + // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx + // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9 + // Although this check for six methods instead of eight + // since IE also does not support "trace" and "connect" + /^(get|post|head|put|delete|options)$/i.test( this.type ) && + + createStandardXHR() || createActiveXHR(); } : // For all other browsers, use the standard XMLHttpRequest object createStandardXHR; diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 766a1b6a9..c52f1cdd9 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -1575,6 +1575,17 @@ module( "ajax", { } } ); + ajaxTest( "#13240 - jQuery.ajax() - support non-RFC2616 methods", 1, { + url: "data/echoQuery.php", + method: "PATCH", + success: function() { + ok( true, "success" ); + }, + error: function() { + ok( false, "error" ); + } + }); + // Support: Chrome 31. // Chrome 31 doesn't fire Ajax requests in beforeunload event handler. // There is no way for us to workaround it and it's been fixed in Chrome 32 -- 2.39.5