X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fajax%2Fajax.js;h=d56ae0f1ed0d611d032e3d15604b8c70b88c2490;hb=94e59e287a9fde9425cd96713e8130aef06bc431;hp=e5a3854cf0efaff7fd1484640e129d19b019917e;hpb=7cc550727c4e0bcd93c5d435f0799f568fc74dfa;p=jquery.git diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index e5a3854..d56ae0f 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -122,9 +122,10 @@ jQuery.fn.extend({ 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 || "" ); + jQuery.getScript( this.src ); + else { + jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" ); + } }).end(); } @@ -303,6 +304,10 @@ jQuery.extend({ * Loads, and executes, a remote JavaScript file using an HTTP GET request. * All of the arguments to the method (except URL) are optional. * + * Warning: Safari <= 2.0.x is unable to evalulate scripts in a global + * context sychronously. If you load functions via getScript, make sure + * to call them after a delay. + * * @example $.getScript("test.js") * * @example $.getScript("test.js", function(){ @@ -467,7 +472,7 @@ jQuery.extend({ * function gets passed two arguments: The XMLHttpRequest object and a * string describing the type the success of the request. * - * (String) data - Data to be sent to the server. Converted to a query + * (Object|String) data - Data to be sent to the server. Converted to a query * string, if not already a string. Is appended to the url for GET-requests. * Override processData option to prevent processing. * @@ -581,9 +586,12 @@ jQuery.extend({ if ( s.ifModified && modRes ) jQuery.lastModified[s.url] = modRes; - // If a local callback was specified, fire it + // process the data (runs the xml through httpData regardless of callback) + var data = jQuery.httpData( xml, s.dataType ); + + // If a local callback was specified, fire it and pass it the data if ( s.success ) - s.success( jQuery.httpData( xml, s.dataType ), status ); + s.success( data, status ); // Fire the global callback if( s.global ) @@ -678,8 +686,10 @@ jQuery.extend({ var data = !type && ct && ct.indexOf("xml") >= 0; data = type == "xml" || data ? r.responseXML : r.responseText; - // If the type is "script", eval it - if ( type == "script" ) eval.call( window, data ); + // If the type is "script", eval it in global context + if ( type == "script" ) { + jQuery.globalEval( data ); + } // Get the JavaScript object, if JSON is used. if ( type == "json" ) eval( "data = " + data ); @@ -706,10 +716,10 @@ jQuery.extend({ } else { // Serialize the key/values for ( var j in a ) { - //if one value is array then treat each array value in part - if (typeof a[j] == 'object') { + // If the value is an array then the key names need to be repeated + if( a[j].constructor == Array ) { for (var k = 0; k < a[j].length; k++) { - s.push( j + "[]=" + encodeURIComponent( a[j][k] ) ); + s.push( j + "=" + encodeURIComponent( a[j][k] ) ); } } else { s.push( j + "=" + encodeURIComponent( a[j] ) ); @@ -719,6 +729,18 @@ jQuery.extend({ // 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 ); } });