Side navigation
Ticket #4206: jquery-callbackname.diff
File jquery-callbackname.diff, 1.7 KB (added by ion, February 20, 2009 09:40PM UTC)
diff --git a/src/ajax.js b/src/ajax.js
index 0f5f805..e5526ee 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -195,7 +195,17 @@ jQuery.extend({
// Build temporary JSONP function
if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
- jsonp = "jsonp" + jsc++;
+ if ( typeof s.callbackName === "string" ) {
+ // callbackName is used to request the given content with a constant URL.
+ // This enables both the browser and the server to cache the data.
+ // s.cache = false would negate the effect.
+ s.cache = true;
+
+ jsonp = "jsonp" + s.callbackName;
+ if ( window[ jsonp ] )
+ throw "callbackName " + s.callbackName + " not unique";
+ } else
+ jsonp = "jsonp" + jsc++;
// Replace the =? sequence both in the query string and the data
if ( s.data )
diff --git a/test/unit/ajax.js b/test/unit/ajax.js
index 0d2f071..81ae0b5 100644
--- a/test/unit/ajax.js
+++ b/test/unit/ajax.js
@@ -442,10 +442,10 @@ test("jQuery.getScript(String, Function) - no callback", function() {
});
test("jQuery.ajax() - JSONP, Local", function() {
- expect(7);
+ expect(8);
var count = 0;
- function plus(){ if ( ++count == 7 ) start(); }
+ function plus(){ if ( ++count == 8 ) start(); }
stop();
@@ -504,6 +504,20 @@ test("jQuery.ajax() - JSONP, Local", function() {
});
jQuery.ajax({
+ url: "data/jsonp.php",
+ dataType: "jsonp",
+ callbackName: "Test",
+ success: function(data){
+ ok( data.data, "JSON results returned (GET, specified callbackName)" );
+ plus();
+ },
+ error: function(data){
+ ok( false, "Ajax error JSON (GET, specified callbackName)" );
+ plus();
+ }
+ });
+
+ jQuery.ajax({
type: "POST",
url: "data/jsonp.php",
dataType: "jsonp",
Download in other formats:
Original Format
File jquery-callbackname.diff, 1.7 KB (added by ion, February 20, 2009 09:40PM UTC)
diff --git a/src/ajax.js b/src/ajax.js
index 0f5f805..e5526ee 100644
--- a/src/ajax.js
+++ b/src/ajax.js
@@ -195,7 +195,17 @@ jQuery.extend({
// Build temporary JSONP function
if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
- jsonp = "jsonp" + jsc++;
+ if ( typeof s.callbackName === "string" ) {
+ // callbackName is used to request the given content with a constant URL.
+ // This enables both the browser and the server to cache the data.
+ // s.cache = false would negate the effect.
+ s.cache = true;
+
+ jsonp = "jsonp" + s.callbackName;
+ if ( window[ jsonp ] )
+ throw "callbackName " + s.callbackName + " not unique";
+ } else
+ jsonp = "jsonp" + jsc++;
// Replace the =? sequence both in the query string and the data
if ( s.data )
diff --git a/test/unit/ajax.js b/test/unit/ajax.js
index 0d2f071..81ae0b5 100644
--- a/test/unit/ajax.js
+++ b/test/unit/ajax.js
@@ -442,10 +442,10 @@ test("jQuery.getScript(String, Function) - no callback", function() {
});
test("jQuery.ajax() - JSONP, Local", function() {
- expect(7);
+ expect(8);
var count = 0;
- function plus(){ if ( ++count == 7 ) start(); }
+ function plus(){ if ( ++count == 8 ) start(); }
stop();
@@ -504,6 +504,20 @@ test("jQuery.ajax() - JSONP, Local", function() {
});
jQuery.ajax({
+ url: "data/jsonp.php",
+ dataType: "jsonp",
+ callbackName: "Test",
+ success: function(data){
+ ok( data.data, "JSON results returned (GET, specified callbackName)" );
+ plus();
+ },
+ error: function(data){
+ ok( false, "Ajax error JSON (GET, specified callbackName)" );
+ plus();
+ }
+ });
+
+ jQuery.ajax({
type: "POST",
url: "data/jsonp.php",
dataType: "jsonp",