Why does $.getJSON silently fail?
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
});
You can use $.ajax
instead, and set the dataType
options to "json". From the documentation:
"json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)