diff --git a/src/ajax.js b/src/ajax.js
index 62c3d8ae1..d0a8a4f12 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -194,25 +194,6 @@ jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSucces
};
});
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
jQuery.extend({
// Counter for holding the number of active queries
@@ -694,15 +675,34 @@ jQuery.extend({
return jqXHR;
},
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
getJSON: function( url, data, callback ) {
return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
}
});
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+});
+
/* Handles responses to an ajax request:
* - finds the right dataType (mediates between content-type and expected dataType)
* - returns the corresponding response
diff --git a/src/manipulation.js b/src/manipulation.js
index 640dfcd6f..f37ec421a 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -256,14 +256,7 @@ jQuery.fn.extend({
if ( node.src ) {
// Hope ajax is available...
- jQuery.ajax({
- url: node.src,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
+ jQuery._evalUrl( node.src );
} else {
jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
}
@@ -465,6 +458,17 @@ jQuery.extend({
data_user.discard( elem );
data_priv.discard( elem );
}
+ },
+
+ _evalUrl: function( url ) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "text",
+ async: false,
+ global: false,
+ success: jQuery.globalEval
+ });
}
});
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index 30710da58..09b425c8a 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -1880,14 +1880,19 @@ test( "html() - script exceptions bubble (#11743)", function() {
ok( false, "Exception ignored" );
}, "Exception bubbled from inline script" );
- var onerror = window.onerror;
- window.onerror = function() {
- ok( true, "Exception thrown in remote script" );
- window.onerror = onerror;
- };
+ if ( jQuery.ajax ) {
+ var onerror = window.onerror;
+ window.onerror = function() {
+ ok( true, "Exception thrown in remote script" );
+ };
- jQuery("#qunit-fixture").html("");
- ok( true, "Exception ignored" );
+ jQuery("#qunit-fixture").html("");
+ ok( true, "Exception ignored" );
+ window.onerror = onerror;
+ } else {
+ ok( true, "No jQuery.ajax" );
+ ok( true, "No jQuery.ajax" );
+ }
});
test( "checked state is cloned with clone()", function() {
@@ -1927,7 +1932,7 @@ testIframeWithCallback( "buildFragment works even if document[0] is iframe's win
test( "script evaluation (#11795)", function() {
- expect( 11 );
+ expect( 13 );
var scriptsIn, scriptsOut,
fixture = jQuery("#qunit-fixture").empty(),
@@ -1968,6 +1973,44 @@ test( "script evaluation (#11795)", function() {
fixture.append( scriptsOut.detach() );
deepEqual( fixture.children("script").get(), scriptsOut.get(), "Scripts detached without reevaluation" );
objGlobal.ok = isOk;
+
+ if ( jQuery.ajax ) {
+ Globals.register("testBar");
+ jQuery("#qunit-fixture").append( "" );
+ strictEqual( window["testBar"], "bar", "Global script evaluation" );
+ } else {
+ ok( true, "No jQuery.ajax" );
+ ok( true, "No jQuery.ajax" );
+ }
+});
+
+test( "jQuery._evalUrl (#12838)", function() {
+
+ expect( 5 );
+
+ var message, expectedArgument,
+ ajax = jQuery.ajax,
+ evalUrl = jQuery._evalUrl;
+
+ message = "jQuery.ajax implementation";
+ expectedArgument = 1;
+ jQuery.ajax = function( input ) {
+ equal( ( input.url || input ).slice( -1 ), expectedArgument, message );
+ expectedArgument++;
+ };
+ jQuery("#qunit-fixture").append("");
+ equal( expectedArgument, 3, "synchronous execution" );
+
+ message = "custom implementation";
+ expectedArgument = 3;
+ jQuery._evalUrl = jQuery.ajax;
+ jQuery.ajax = function( options ) {
+ strictEqual( options, {}, "Unexpected call to jQuery.ajax" );
+ };
+ jQuery("#qunit-fixture").append("");
+
+ jQuery.ajax = ajax;
+ jQuery._evalUrl = evalUrl;
});
test( "insertAfter, insertBefore, etc do not work when destination is original element. Element is removed (#4087)", function() {