rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
rselectTextarea = /^(?:select|textarea)/i,
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- rnoContent = /^(?:GET|HEAD|DELETE)$/,
+ rnoContent = /^(?:GET|HEAD)$/,
rbracket = /\[\]$/,
jsre = /\=\?(&|$)/,
rquery = /\?/,
s.data = jQuery.param( s.data, s.traditional );
}
+ // If the jsonpCallback has been set, we can assume that dataType is jsonp
+ // Ticket #5803
+ if ( s.jsonpCallback ) {
+ s.dataType = "jsonp";
+ }
+
// Handle JSONP Parameter Callbacks
if ( s.dataType === "jsonp" ) {
if ( type === "GET" ) {
s.cache = false;
}
- if ( s.cache === false && type === "GET" ) {
+ if ( s.cache === false && noContent ) {
var ts = jQuery.now();
// try replacing _= if it is there
s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
}
- // If data is available, append data to url for get requests
- if ( s.data && type === "GET" ) {
+ // If data is available, append data to url for GET/HEAD requests
+ if ( s.data && noContent ) {
s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
}
} else {
var parts = rfxnum.exec(val),
- start = e.cur(true) || 0;
+ start = e.cur() || 0;
if ( parts ) {
var end = parseFloat( parts[2] ),
// We need to compute starting value
if ( unit !== "px" ) {
jQuery.style( self, name, (end || 1) + unit);
- start = ((end || 1) / e.cur(true)) * start;
+ start = ((end || 1) / e.cur()) * start;
jQuery.style( self, name, start + unit);
}
if ( handler === false ) {
handler = returnFalse;
+ } else if ( !handler ) {
+ // Fixes bug #7229. Fix recommended by jdalton
+ return;
}
var handleObjIn, handleObj;
if ( ret === false ) {
stop = false;
}
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
}
}
});
});
+test("jQuery.ajax - HEAD requests", function() {
+ expect(2);
+
+ stop();
+ jQuery.ajax({
+ url: url("data/name.html"),
+ type: "HEAD",
+ success: function(data, status, xhr){
+ var h = xhr.getAllResponseHeaders();
+ ok( /Date/i.test(h), 'No Date in HEAD response' );
+
+ jQuery.ajax({
+ url: url("data/name.html"),
+ data: { whip_it: "good" },
+ type: "HEAD",
+ success: function(data, status, xhr){
+ var h = xhr.getAllResponseHeaders();
+ ok( /Date/i.test(h), 'No Date in HEAD response with data' );
+ start();
+ }
+ });
+ }
+ });
+
+});
+
test("jQuery.ajax - beforeSend", function() {
expect(1);
stop();
plus();
}
});
+
+ // Supports Ticket #5803
+ jQuery.ajax({
+ url: "data/jsonp.php",
+ jsonpCallback: "jsonpResults",
+ success: function(data){
+ ok( data.data, "JSON results returned without dataType:jsonp when jsonpCallback is defined" );
+ plus();
+ },
+ error: function(data){
+ ok( false, "Ajax error JSON (GET, custom callback name)" );
+ plus();
+ }
+ });
+
});
test("JSONP - Custom JSONP Callback", function() {
module("event");
+test("null or undefined handler", function() {
+ expect(2);
+ // Supports Fixes bug #7229
+ try {
+
+ jQuery("#firstp").click(null);
+
+ ok(true, "Passing a null handler will not throw an exception");
+
+ } catch (e) {}
+
+ try {
+
+ jQuery("#firstp").click(undefined);
+
+ ok(true, "Passing an undefined handler will not throw an exception");
+
+ } catch (e) {}
+});
+
test("bind(), with data", function() {
expect(3);
var handler = function(event) {
equals( mouseoverCounter, 4, "die" );
});
+test("live/delegate immediate propagation", function() {
+ expect(2);
+
+ var $p = jQuery("#firstp"), $a = $p.find("a:first"), lastClick;
+
+ lastClick = "";
+ $a.live( "click", function(e) {
+ lastClick = "click1";
+ e.stopImmediatePropagation();
+ });
+ $a.live( "click", function(e) {
+ lastClick = "click2";
+ });
+ $a.trigger( "click" );
+ equals( lastClick, "click1", "live stopImmediatePropagation" );
+ $a.die( "click" );
+
+ lastClick = "";
+ $p.delegate( "a", "click", function(e) {
+ lastClick = "click1";
+ e.stopImmediatePropagation();
+ });
+ $p.delegate( "a", "click", function(e) {
+ lastClick = "click2";
+ });
+ $a.trigger( "click" );
+ equals( lastClick, "click1", "delegate stopImmediatePropagation" );
+ $p.undelegate( "click" );
+});
+
test("bind(), iframes", function() {
// events don't work with iframes, see #939 - this test fails in IE because of contentDocument
var doc = jQuery("#loadediframe").contents();