Skip to content
Permalink
Browse files

Detect JSON Ajax requests by the response content-type (like is done …

…with XML). Fixes #5709.
  • Loading branch information
rwaldron authored and jeresig committed Jan 6, 2010
1 parent 230614b commit 787f271052220c20787104f0eba6441aedac22ff
Showing with 26 additions and 2 deletions.
  1. +2 −1 src/ajax.js
  2. +5 −1 test/data/json.php
  3. +19 −0 test/unit/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 );
@@ -1,9 +1,13 @@
<?php
error_reporting(0);
if ( $_REQUEST['header'] ) {
header("Content-type: application/json");
}
$json = $_REQUEST['json'];
if($json) {
echo '[ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ]';
} else {
echo '{ "data": {"lang": "en", "length": 25} }';
}
?>
?>
@@ -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();

0 comments on commit 787f271

Please sign in to comment.
You can’t perform that action at this time.