data: params,
ifModified: ifModified,
complete: function(res, status){
+ // If successful, inject the HTML into all the matched elements
if ( status == "success" || !ifModified && status == "notmodified" )
- // Inject the HTML into all the matched elements
- self.attr("innerHTML", res.responseText)
- // Execute all the scripts inside of the newly-injected HTML
- .evalScripts()
- // Execute callback
- .each( callback, [res.responseText, status, res] );
- else
- callback.apply( self, [res.responseText, status, res] );
+ self.html(res.responseText);
+
+ self.each( callback, [res.responseText, status, res] );
}
});
return this;
*/
serialize: function() {
return jQuery.param( this );
- },
-
- /**
- * Evaluate all script tags inside this jQuery. If they have a src attribute,
- * the script is loaded, otherwise it's content is evaluated.
- *
- * @name evalScripts
- * @type jQuery
- * @private
- * @cat Ajax
- */
- evalScripts: function() {
- return this.find("script").each(function(){
- if ( this.src )
- jQuery.getScript( this.src );
- else
- jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
- }).end();
}
});
});
},
- // timeout (ms)
- //timeout: 0,
-
/**
* Set the timeout in milliseconds of all AJAX requests to a specific amount of time.
* This will make all future AJAX requests timeout after a specified amount
// Wait for a response to come back
var onreadystatechange = function(isTimeout){
// The transfer is complete and the data is available, or the request timed out
- if ( xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
+ if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
requestDone = true;
// clear poll interval
ival = null;
}
- var status;
- try {
- status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
- s.ifModified && jQuery.httpNotModified( xml, s.url ) ? "notmodified" : "success" : "error";
- // Make sure that the request was successful or notmodified
- if ( status != "error" ) {
- // 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 = "error";
- 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 )
*/
httpData: function( r, type ) {
var ct = r.getResponseHeader("content-type");
- var data = !type && ct && ct.indexOf("xml") >= 0;
- data = type == "xml" || data ? r.responseXML : r.responseText;
+ var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0;
+ data = xml ? r.responseXML : r.responseText;
+
+ if ( xml && data.documentElement.tagName == "parsererror" )
+ throw "parsererror";
// If the type is "script", eval it in global context
if ( type == "script" )
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
- eval( "data = " + data );
-
- // evaluate scripts within html
- if ( type == "html" )
- jQuery("<div>").html(data).evalScripts();
+ data = eval("(" + data + ")");
return data;
},
// Return the resulting serialization
return s.join("&");
- },
-
- // evalulates a script in global context
- // not reliable for safari
- globalEval: function( data ) {
- if ( window.execScript )
- window.execScript( data );
- else if ( jQuery.browser.safari )
- // safari doesn't provide a synchronous global eval
- window.setTimeout( data, 0 );
- else
- eval.call( window, data );
}
});