* start();
* });
*
+ * @test stop(); // check if load can be called with only url
+ * $('#first').load("data/name.php");
+ * $.get("data/name.php", function() {
+ * ok( $('#first').text() == 'ERROR', 'Check if load works without callback');
+ * start();
+ * });
+ *
+ * @test stop();
+ * foobar = undefined;
+ * foo = undefined;
+ * var verifyEvaluation = function() {
+ * ok( foobar == "bar", 'Check if script src was evaluated after load' );
+ * start();
+ * };
+ * $('#first').load('data/test.html', function() {
+ * ok( $('#first').html().match(/^html text/), 'Check content after loading html' );
+ * ok( foo == "foo", 'Check if script was evaluated after load' );
+ * setTimeout(verifyEvaluation, 600);
+ * });
+ *
* @name load
* @type jQuery
* @param String url The URL of the HTML file to load.
if ( status == "success" || !ifModified && status == "notmodified" ) {
// Inject the HTML into all the matched elements
- self.html(res.responseText).each( callback, [res.responseText, status] );
-
- // Execute all the scripts inside of the newly-injected HTML
- $("script", self).each(function(){
- if ( this.src )
- $.getScript( this.src );
- else
- eval.call( window, this.text || this.textContent || this.innerHTML || "" );
- });
+ self.html(res.responseText)
+ // Execute all the scripts inside of the newly-injected HTML
+ .evalScripts()
+ // Execute callback
+ .each( callback, [res.responseText, status] );
} else
callback.apply( self, [res.responseText, status] );
},
/**
- * A function for serializing a set of input elements into
- * a string of data.
+ * Serializes a set of input elements into a string of data.
+ * This will serialize all given elements. If you need
+ * serialization similar to the form submit of a browser,
+ * you should use the form plugin. This is also true for
+ * selects with multiple attribute set, only a single option
+ * is serialized.
*
* @example $("input[@type=text]").serialize();
* @before <input type='text' name='name' value='John'/>
* @after name=John&location=Boston
* @desc Serialize a selection of input elements to a string
*
- * @test var data = $(':input').serialize();
- * ok( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo[bar]=&name=name&button=&=foobar&select1=&select2=3&select3=1', 'Check form serialization as query string' );
+ * @test var data = $(':input').not('button').serialize();
+ * // ignore button, IE takes text content as value, not relevant for this test
+ * ok( data == 'action=Test&text2=Test&radio1=on&radio2=on&check=on&=on&hidden=&foo[bar]=&name=name&=foobar&select1=&select2=3&select3=1', 'Check form serialization as query string' );
*
* @name serialize
* @type String
* @cat AJAX
*/
serialize: function() {
- return $.param( this );
+ return jQuery.param( this );
+ },
+
+ evalScripts: function() {
+ return this.find('script').each(function(){
+ if ( this.src )
+ // for some weird reason, it doesn't work if the callback is ommited
+ jQuery.getScript( this.src, function() {} );
+ else
+ eval.call( window, this.text || this.textContent || this.innerHTML || "" );
+ }).end();
}
});
* ok( counter.error == 2, 'Check failed request' );
* ok( counter.success == 0, 'Check failed request' );
* ok( counter.complete == 3, 'Check failed request' );
- * counter.error = 0; counter.success = 0; counter.complete = 0;
- * $.ajaxTimeout(0);
- * $.ajax({url: "data/name.php?wait=5", global: false, success: success, error: error, complete: function() {
- * ok( counter.error == 0, 'Check sucesful request without globals' );
- * ok( counter.success == 1, 'Check sucesful request without globals' );
- * ok( counter.complete == 0, 'Check sucesful request without globals' );
- * counter.error = 0; counter.success = 0; counter.complete = 0;
- * $.ajaxTimeout(500);
- * $.ajax({url: "data/name.php?wait=5", global: false, success: success, error: error, complete: function() {
- * ok( counter.error == 1, 'Check failedrequest without globals' );
- * ok( counter.success == 0, 'Check failed request without globals' );
- * ok( counter.complete == 0, 'Check failed request without globals' );
- * start();
- * }});
- * }});
+ * start();
+ * }});
+ * }});
+
+ * @test stop(); var counter = { complete: 0, success: 0, error: 0 };
+ * counter.error = 0; counter.success = 0; counter.complete = 0;
+ * var success = function() { counter.success++ };
+ * var error = function() { counter.error++ };
+ * $.ajaxTimeout(0);
+ * $.ajax({url: "data/name.php", global: false, success: success, error: error, complete: function() {
+ * ok( counter.error == 0, 'Check sucesful request without globals' );
+ * ok( counter.success == 1, 'Check sucesful request without globals' );
+ * ok( counter.complete == 0, 'Check sucesful request without globals' );
+ * counter.error = 0; counter.success = 0; counter.complete = 0;
+ * $.ajaxTimeout(500);
+ * $.ajax({url: "data/name.php?wait=5", global: false, success: success, error: error, complete: function() {
+ * ok( counter.error == 1, 'Check failed request without globals' );
+ * ok( counter.success == 0, 'Check failed request without globals' );
+ * ok( counter.complete == 0, 'Check failed request without globals' );
+ * start();
* }});
* }});
*
* )
*
* @test stop();
- * $.get("data/dashboard.xml", function(xml) {
- * var content = [];
- * $('tab', xml).each(function(k) {
- * // workaround for IE needed here, $(this).text() throws an error
- * // content[k] = $.trim(this.firstChild.data) || $(this).text();
- * content[k] = $(this).text();
- * });
- * ok( content[0] && content[0].match(/blabla/), 'Check first tab' );
- * ok( content[1] && content[1].match(/blublu/), 'Check second tab' );
- * start();
+ * $.get('data/dashboard.xml', function(xml) {
+ * var content = [];
+ * $('tab', xml).each(function() {
+ * content.push($(this).text());
+ * });
+ * ok( content[0] == 'blabla', 'Check first tab');
+ * ok( content[1] == 'blublu', 'Check second tab');
+ * start();
* });
- *
+ *
* @name $.get
* @type jQuery
* @param String url The URL of the page to load.
* @cat AJAX
*/
get: function( url, data, callback, type, ifModified ) {
- if ( data.constructor == Function ) {
+ if ( data && data.constructor == Function ) {
type = callback;
callback = data;
data = null;
}
- if ( data ) url += "?" + jQuery.param(data);
+ // append ? + data or & + data, in case there are already params
+ if ( data ) url += ((url.indexOf("?") > -1) ? "&" : "?") + jQuery.param(data);
// Build and start the HTTP Request
jQuery.ajax( "GET", url, null, function(r, status) {
* start();
* });
*
+ * @test
+ * $.getScript("data/test.js");
+ * ok( true, "Check with single argument, can't verify" );
+ *
* @name $.getScript
* @type jQuery
* @param String url The URL of the page to load.
* @cat AJAX
*/
getScript: function( url, callback ) {
- jQuery.get(url, callback, "script");
+ if(callback)
+ jQuery.get(url, null, callback, "script");
+ else {
+ jQuery.get(url, null, null, "script");
+ }
},
/**
* start();
* }
* });
+ * // reset timeout
+ * $.ajaxTimeout(0);
*
*
* @name $.ajaxTimeout
* }
* });
*
+ * @test stop();
+ * foobar = undefined;
+ * foo = undefined;
+ * var verifyEvaluation = function() {
+ * ok( foobar == "bar", 'Check if script src was evaluated for datatype html' );
+ * start();
+ * };
+ * $.ajax({
+ * dataType: "html",
+ * url: "data/test.html",
+ * success: function(data) {
+ * ok( data.match(/^html text/), 'Check content for datatype html' );
+ * ok( foo == "foo", 'Check if script was evaluated for datatype html' );
+ * setTimeout(verifyEvaluation, 600);
+ * }
+ * });
+ *
+ * @test stop();
+ * $.ajax({
+ * url: "data/with_fries.xml", dataType: "xml", type: "GET", data: "", success: function(resp) {
+ * ok( $("properties", resp).length == 1, 'properties in responseXML' );
+ * ok( $("jsconf", resp).length == 1, 'jsconf in responseXML' );
+ * ok( $("thing", resp).length == 2, 'things in responseXML' );
+ * start();
+ * }
+ * });
+ *
* @name $.ajax
* @type jQuery
* @param Hash prop A set of properties to initialize the request with.
ajax: function( type, url, data, ret, ifModified ) {
// If only a single argument was passed in,
// assume that it is a object of key/value pairs
+ var global = true;
+ var timeout = jQuery.timeout;
if ( !url ) {
ret = type.complete;
var success = type.success;
var dataType = type.dataType;
var global = typeof type.global == "boolean" ? type.global : true;
var timeout = typeof type.timeout == "number" ? type.timeout : jQuery.timeout;
- var ifModified = type.ifModified || false;
+ ifModified = type.ifModified || false;
data = type.data;
url = type.url;
type = type.type;
// Get the JavaScript object, if JSON is used.
if ( type == "json" ) eval( "data = " + data );
+
+ // evaluate scripts within html
+ if ( type == "html" ) $("<div>").html(data).evalScripts();
return data;
},