Skip to content

Commit

Permalink
Ajax: improve content-type detection
Browse files Browse the repository at this point in the history
Fixes gh-2584
Closes gh-2643
  • Loading branch information
markelog committed Oct 12, 2015
1 parent cb087ce commit 239169b
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 5 deletions.
6 changes: 3 additions & 3 deletions src/ajax.js
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,9 @@ jQuery.extend( {
},

contents: {
xml: /xml/,
html: /html/,
json: /json/
xml: /\bxml\b/,
html: /\bhtml/,
json: /\bjson\b/
},

responseFields: {
Expand Down
2 changes: 1 addition & 1 deletion src/ajax/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jQuery.ajaxSetup( {
"application/ecmascript, application/x-ecmascript"
},
contents: {
script: /(?:java|ecma)script/
script: /\b(?:java|ecma)script\b/
},
converters: {
"text script": function( text ) {
Expand Down
5 changes: 5 additions & 0 deletions test/data/ajax/content-type.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php
$type = $_REQUEST['content-type'];
header("Content-type: $type");
echo $_REQUEST['response']
?>
104 changes: 103 additions & 1 deletion test/unit/ajax.js
Original file line number Diff line number Diff line change
Expand Up @@ -1794,7 +1794,109 @@ QUnit.module( "ajax", {
}
);

// //----------- jQuery.ajaxPrefilter()
ajaxTest( "gh-2587 - when content-type not xml, but looks like one", 1, function( assert ) {
return {
url: url( "data/ajax/content-type.php" ),
data: {
"content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"response": "<test/>"
},
success: function( result ) {
assert.strictEqual(
typeof result,
"string",
"Should handle it as a string, not xml"
);
}
};
} );

ajaxTest( "gh-2587 - when content-type not xml, but looks like one", 1, function( assert ) {
return {
url: url( "data/ajax/content-type.php" ),
data: {
"content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"response": "<test/>"
},
success: function( result ) {
assert.strictEqual(
typeof result,
"string",
"Should handle it as a string, not xml"
);
}
};
} );

ajaxTest( "gh-2587 - when content-type not json, but looks like one", 1, function( assert ) {
return {
url: url( "data/ajax/content-type.php" ),
data: {
"content-type": "test/jsontest",
"response": JSON.stringify({test: "test"})
},
success: function( result ) {
assert.strictEqual(
typeof result,
"string",
"Should handle it as a string, not json"
);
}
};
} );

ajaxTest( "gh-2587 - when content-type not html, but looks like one", 1, function( assert ) {
return {
url: url( "data/ajax/content-type.php" ),
data: {
"content-type": "test/htmltest",
"response": "<p>test</p>"
},
success: function( result ) {
assert.strictEqual(
typeof result,
"string",
"Should handle it as a string, not html"
);
}
};
} );

ajaxTest( "gh-2587 - when content-type not javascript, but looks like one", 1, function( assert ) {
return {
url: url( "data/ajax/content-type.php" ),
data: {
"content-type": "test/testjavascript",
"response": "alert(1)"
},
success: function( result ) {
assert.strictEqual(
typeof result,
"string",
"Should handle it as a string, not javascript"
);
}
};
} );

ajaxTest( "gh-2587 - when content-type not ecmascript, but looks like one", 1, function( assert ) {
return {
url: url( "data/ajax/content-type.php" ),
data: {
"content-type": "test/testjavascript",
"response": "alert(1)"
},
success: function( result ) {
assert.strictEqual(
typeof result,
"string",
"Should handle it as a string, not ecmascript"
);
}
};
} );

//----------- jQuery.ajaxPrefilter()

ajaxTest( "jQuery.ajaxPrefilter() - abort", 1, function( assert ) {
return {
Expand Down

0 comments on commit 239169b

Please sign in to comment.