Why does $.getJSON silently fail?

醉酒当歌 提交于 2019-11-27 11:12:55
Mr Shoubs

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.)

You should have a look at the docs for this API... it has a .error on it.

http://api.jquery.com/jQuery.getJSON/

b.squared

If you're requesting JSONP as the response, you will get a silent fail if there is no response (e.g. network outage). See this thread for details.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!