Side navigation
#8764 closed bug (wontfix)
Opened April 04, 2011 02:16PM UTC
Closed April 07, 2011 02:55PM UTC
Regression in getJSON
| Reported by: | patrick.wolf@oracle.com | Owned by: | jaubourg |
|---|---|---|---|
| Priority: | high | Milestone: | 1.next |
| Component: | ajax | Version: | 1.5.2 |
| Keywords: | Cc: | ||
| Blocked by: | Blocking: |
Description
Using $.getJSON for a JSONP request always adds a parameter &_=somenumber to the URL which can break the request, because not all server system do expect a parameter called _ in the request.
Using the example from http://api.jquery.com/jQuery.getJSON/ demonstrates the problem when using jQuery 1.5.2 and viewing the request using FF and Live HTTP Header. Running the same example in 1.4.4 doesn't add that parameter.
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "cat",
tagmode: "any",
format: "json"
},
function(data) {
alert('test');
});
Attachments (0)
Change History (2)
Changed April 07, 2011 01:37PM UTC by comment:1
| component: | unfiled → ajax |
|---|---|
| owner: | → jaubourg |
| priority: | undecided → high |
| status: | new → assigned |
Changed April 07, 2011 02:55PM UTC by comment:2
| resolution: | → wontfix |
|---|---|
| status: | assigned → closed |
It's because default for cache option is false in the context of a script request (which jsonp is). You have several solutions around this:
- use ajax
$.ajax( "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
dataType: "jsonp",
cache: true,
data: {
tags: "cat",
tagmode: "any",
format: "json"
},
success: function(data) {
alert('test');
}
} );
- set cache option to true by default using ajaxSetup:
$.ajaxSetup({
cache: true;
});
- make sure cache option is true by default for script using a prefilter
$.ajaxPrefilter( "script", function( options, originalOptions ) {
if ( originalOptions.cache == null ) {
options.cache = true;
}
} );
- create a prefilter to deal with the service that poses a problem:
$.ajaxPrefilter( "script", function( options ) {
if ( /^http:\\/\\/api\\.flickr\\.com\\//.test( options.url ) ) {
options.cache = true;
}
} );
Lots of alternatives here.