if ( status == "success" || !ifModified && status == "notmodified" )
self.html(res.responseText);
- self.each( callback, [res.responseText, status, res] );
+ // Add delay to account for Safari's delay in globalEval
+ setTimeout(function(){
+ self.each( callback, [res.responseText, status, res] );
+ }, 13);
}
});
return this;
* @see ajaxSetup(Map)
*/
ajax: function( s ) {
- // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
- s = jQuery.extend({}, jQuery.ajaxSettings, s);
+ // Extend the settings, but re-extend 's' so that it can be
+ // checked again later (in the test suite, specifically)
+ s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
// if data available
if ( s.data ) {
// convert data if not already a string
- if (s.processData && typeof s.data != "string")
- s.data = jQuery.param(s.data);
+ if ( s.processData && typeof s.data != "string" )
+ s.data = jQuery.param(s.data);
+
// append data to url for get requests
- if( s.type.toLowerCase() == "get" ) {
+ if ( s.type.toLowerCase() == "get" ) {
// "?" + data or "&" + data (in case there are already params)
- s.url += ((s.url.indexOf("?") > -1) ? "&" : "?") + s.data;
+ s.url += (s.url.indexOf("?") > -1 ? "&" : "?") + s.data;
+
// IE likes to send both get and post data, prevent this
s.data = null;
}
ival = null;
}
- var status;
- try {
- status = isTimeout == "timeout" && "timeout" ||
- !jQuery.httpSuccess( xml ) && "error" ||
- s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
- "success";
-
- // Make sure that the request was successful or notmodified
- if ( status != "error" && status != "timeout" ) {
- // Cache Last-Modified header, if ifModified mode.
- var modRes;
- try {
- modRes = xml.getResponseHeader("Last-Modified");
- } catch(e) {} // swallow exception thrown by FF if header is not available
-
- if ( s.ifModified && modRes )
- jQuery.lastModified[s.url] = modRes;
-
+ var status = isTimeout == "timeout" && "timeout" ||
+ !jQuery.httpSuccess( xml ) && "error" ||
+ s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
+ "success";
+
+ if ( status == "success" ) {
+ // Watch for, and catch, XML document parse errors
+ try {
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.httpData( xml, s.dataType );
+ } catch(e) {
+ status = "parsererror";
+ }
+ }
+
+ // Make sure that the request was successful or notmodified
+ if ( status == "success" ) {
+ // Cache Last-Modified header, if ifModified mode.
+ var modRes;
+ try {
+ modRes = xml.getResponseHeader("Last-Modified");
+ } catch(e) {} // swallow exception thrown by FF if header is not available
- // If a local callback was specified, fire it and pass it the data
- if ( s.success )
- s.success( data, status );
+ if ( s.ifModified && modRes )
+ jQuery.lastModified[s.url] = modRes;
- // Fire the global callback
- if( s.global )
- jQuery.event.trigger( "ajaxSuccess", [xml, s] );
- } else
- jQuery.handleError(s, xml, status);
- } catch(e) {
- status = "parsererror";
- jQuery.handleError(s, xml, status, e);
- }
+ // If a local callback was specified, fire it and pass it the data
+ if ( s.success )
+ s.success( data, status );
+
+ // Fire the global callback
+ if ( s.global )
+ jQuery.event.trigger( "ajaxSuccess", [xml, s] );
+ } else
+ jQuery.handleError(s, xml, status);
// The request was completed
if( s.global )
}
};
- // don't attach the handler to the request, just poll it instead
- var ival = setInterval(onreadystatechange, 13);
-
- // Timeout checker
- if ( s.timeout > 0 )
- setTimeout(function(){
- // Check to see if the request is still happening
- if ( xml ) {
- // Cancel the request
- xml.abort();
-
- if( !requestDone )
- onreadystatechange( "timeout" );
- }
- }, s.timeout);
+ if ( s.async ) {
+ // don't attach the handler to the request, just poll it instead
+ var ival = setInterval(onreadystatechange, 13);
+
+ // Timeout checker
+ if ( s.timeout > 0 )
+ setTimeout(function(){
+ // Check to see if the request is still happening
+ if ( xml ) {
+ // Cancel the request
+ xml.abort();
+
+ if( !requestDone )
+ onreadystatechange( "timeout" );
+ }
+ }, s.timeout);
+ }
// Send the data
try {
// If the type is "script", eval it in global context
if ( type == "script" )
- (new Function( data ))();
+ jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" )