There are several problems with your call to $.ajax .
$.ajax({ url: url + '?callback=?', // this is not needed for JSONP. What this does, is force a local // AJAX call to accessed as if it were cross domain crossDomain: true, // JSONP can only be GET type: "POST", data: {key: key}, // contentType is for the request body, it is incorrect here contentType: "application/json; charset=utf-8;", // This does not work with JSONP, nor should you be using it anyway. // It will lock up the browser async: false, dataType: 'jsonp', // This changes the parameter that jQuery will add to the URL jsonp: 'callback', // This overrides the callback value that jQuery will add to the URL // useful to help with caching // or if the URL has a hard-coded callback (you need to set jsonp: false) jsonpCallback: 'jsonpCallback', error: function(xhr, status, error) { console.log(status + '; ' + error); } });
You should name your url like this:
$.ajax({ url: url, data: {key: key}, dataType: 'jsonp', success: function(response) { console.log('callback success'); }, error: function(xhr, status, error) { console.log(status + '; ' + error); } });
JSONP is not JSON. JSONP is actually just adding a script tag to your <head> . The response should be a JavaScript file containing a function call with JSON data as a parameter.
JSONP is what the server should support. If the server does not respond correctly, you cannot use JSONP.
Please read the docs: http://api.jquery.com/jquery.ajax/
Rocket hazmat
source share