It seems very inconvenient that jQuery's $.getJSON
silently fails when the data returned is not valid JSON. Why was this implemented with silent failure? What is the easiest way to perform getJSON with better failure behavior (e.g. throw an exception, console.log()
, or whatever)?
It is a callback function that executes on the successful server request. It also has three parameters that are data, status, and xhr in which data contains the data returned from the server, status represents the request status like "success", "error", etc., and the xhr contains the XMLHttpRequest object.
The getJSON() method is used to get JSON data using an AJAX HTTP GET request.
you can use
function name() { $.getJSON("", function(d) { alert("success"); }).done(function(d) { alert("done"); }).fail(function(d) { alert("error"); }).always(function(d) { alert("complete"); }); }
If you want to see the cause of the error, use the full version
function name() { $.getJSON("", function(d) { alert("success"); }).fail( function(d, textStatus, error) { console.error("getJSON failed, status: " + textStatus + ", error: "+error) }); }
If your JSON is not well-formed, you will see something like
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
If the URL is wrong, you will see something like
getJSON failed, status: error, error: Not Found
If you are trying to get JSON from another domain, violating the Same-origin policy, this approach returns an empty message. Note that you can work around the Same-origin policy by using JSONP (which has it's limitations) or the preferred method of Cross-origin Resource Sharing (CORS).
Straight from the documentation:
Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently.
As the documentation page says, getJSON is simply a shorthand method for
$.ajax({ url: url, dataType: 'json', data: data, success: callback });
To get failure behavior, you can use $.ajax like this:
$.ajax({ url: url, dataType: 'json', data: data, success: callback, error: another callback });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With