From 787f271052220c20787104f0eba6441aedac22ff Mon Sep 17 00:00:00 2001 From: Rick Waldron Date: Tue, 5 Jan 2010 19:48:16 -0500 Subject: [PATCH] Detect JSON Ajax requests by the response content-type (like is done with XML). Fixes #5709. --- src/ajax.js | 3 ++- test/data/json.php | 6 +++++- test/unit/ajax.js | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 91519d2..6d4026b 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -557,6 +557,7 @@ jQuery.extend({ httpData: function( xhr, type, s ) { var ct = xhr.getResponseHeader("content-type"), xml = type === "xml" || !type && ct && ct.indexOf("xml") >= 0, + json = type === "json" || !type && ct && ct.indexOf("json") >= 0, data = xml ? xhr.responseXML : xhr.responseText; if ( xml && data.documentElement.nodeName === "parsererror" ) { @@ -578,7 +579,7 @@ jQuery.extend({ } // Get the JavaScript object, if JSON is used. - if ( type === "json" ) { + if ( json ) { // Try to use the native JSON parser first try { data = JSON.parse( data ); diff --git a/test/data/json.php b/test/data/json.php index d19a417..d6e0f2f 100644 --- a/test/data/json.php +++ b/test/data/json.php @@ -1,9 +1,13 @@ \ No newline at end of file +?> diff --git a/test/unit/ajax.js b/test/unit/ajax.js index f9f595a..b1cb486 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -797,6 +797,25 @@ test("jQuery.ajax() - script, Remote with scheme-less URL", function() { }); }); +test("jQuery.ajax() - json by content-type", function() { + expect(5); + + stop(); + + jQuery.ajax({ + url: "data/json.php", + data: { header: "json", json: "array" }, + success: function( json ) { + ok( json.length >= 2, "Check length"); + equals( json[0].name, 'John', 'Check JSON: first, name' ); + equals( json[0].age, 21, 'Check JSON: first, age' ); + equals( json[1].name, 'Peter', 'Check JSON: second, name' ); + equals( json[1].age, 25, 'Check JSON: second, age' ); + start(); + } + }); +}); + test("jQuery.getJSON(String, Hash, Function) - JSON array", function() { expect(5); stop(); -- 1.7.10.4