getJSON超时处理

phe*_*gen 20 javascript ajax jquery json

我正在使用jQuery getJSON()函数.这个函数获取数据没有问题.但有时等待,等待等待......我的加载栏显示加载加载在页面中心.所以jQuery ajax()函数有一个超时变量.但我想使用getJSON功能.我认为我可以使用ajaxStart()ajaxStop()功能.但是怎么样?

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
        setTimeout("throw '';",15000) //i used this but didn't work
        setTimeout("return;",15000) //i used this but didn't work
        setTimeout("abort();",15000) //i used this but didn't work.(Abort all ajax events)
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });
Run Code Online (Sandbox Code Playgroud)

let*_*tar 16

getJSON() 只是以下的简写:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});
Run Code Online (Sandbox Code Playgroud)

因此,您可以根据需要使用$.ajax()和指定timeout选项.另见:http://api.jquery.com/jQuery.getJSON/


Den*_*ret 16

getJSON()返回一个可以调用该abort函数的promise :

var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);
Run Code Online (Sandbox Code Playgroud)

编辑:但如果你的目标只是在需要花费太多时间的时候中止,那么致命的吉他的回答会更好.


Bru*_*uno 10

致命吉他提到的getJSON()功能只是一种简写$.ajax().如果要检测是否发生超时而不是实际错误,请使用下面的代码.

var request = $.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: function( ) { },
    timeout: 2000
}).fail( function( xhr, status ) {
    if( status == "timeout" ) {
        // do stuff in case of timeout
    }
});
Run Code Online (Sandbox Code Playgroud)