From fbc73d45b487dd863886c7fd3f0af1fd4dec261b Mon Sep 17 00:00:00 2001 From: John Resig Date: Sun, 6 Dec 2009 17:17:14 -0800 Subject: [PATCH] Added in support for $.ajax jsonpCallback (allowing you to specify the name of the callback method - and allowing you to avoid skipping the cache). Fixes #4206. --- src/ajax.js | 4 ++-- test/unit/ajax.js | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 568a75d..7c5c838 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -221,7 +221,7 @@ jQuery.extend({ // Build temporary JSONP function if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) { - jsonp = "jsonp" + jsc++; + jsonp = s.jsonpCallback || ("jsonp" + jsc++); // Replace the =? sequence both in the query string and the data if ( s.data ) { @@ -235,7 +235,7 @@ jQuery.extend({ s.dataType = "script"; // Handle JSONP-style loading - window[ jsonp ] = function(tmp){ + window[ jsonp ] = window[ jsonp ] || function(tmp){ data = tmp; success(); complete(); diff --git a/test/unit/ajax.js b/test/unit/ajax.js index d827a15..4d63ce5 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -518,10 +518,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(); @@ -580,6 +580,20 @@ test("jQuery.ajax() - JSONP, Local", function() { }); jQuery.ajax({ + url: "data/jsonp.php", + dataType: "jsonp", + jsonpCallback: "jsonpResults", + success: function(data){ + ok( data.data, "JSON results returned (GET, custom callback name)" ); + plus(); + }, + error: function(data){ + ok( false, "Ajax error JSON (GET, custom callback name)" ); + plus(); + } + }); + + jQuery.ajax({ type: "POST", url: "data/jsonp.php", dataType: "jsonp", @@ -624,6 +638,22 @@ test("jQuery.ajax() - JSONP, Local", function() { }); }); +test("JSONP - Custom JSONP Callback", function() { + expect(1); + stop(); + + window.jsonpResults = function(data) { + ok( data.data, "JSON results returned (GET, custom callback function)" ); + start(); + }; + + jQuery.ajax({ + url: "data/jsonp.php", + dataType: "jsonp", + jsonpCallback: "jsonpResults" + }); +}); + test("jQuery.ajax() - JSONP, Remote", function() { expect(4); -- 1.7.10.4