getJSON超时处理

时间:2013-01-09 15:25:56

标签: javascript jquery ajax 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();
    });

6 个答案:

答案 0 :(得分:16)

getJSON()只是以下内容的简写:

$.ajax({
    dataType: "json",
    url: url,
    data: data,
    success: success
});

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

答案 1 :(得分:15)

getJSON()会返回一个可以调用abort函数的承诺:

var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);

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

答案 2 :(得分: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
    }
});

答案 3 :(得分:3)

总有核路线:

//Set AJAX timeout to 10 seconds
$.ajaxSetup({
  timeout: 10*1000
});

这将设置你的程序所做的所有AJAX请求(即使是通过$ .getJSON),让你的时间超过10秒(或者你有什么)。

答案 4 :(得分:1)

setTimeout函数在全局范围内指定数量的milisecons之后执行一组代码。

getJSON函数(根据jQuery文档http://api.jquery.com/jQuery.getJSON/)是简写:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

所以你想这样打电话:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success,
  timeout: 15000
});

$('.loadingDiv')
    .hide()
    .ajaxStart(function() {
        $(this).fadeIn();
    })
    .ajaxStop(function() {
        $(this).fadeOut();
    });

答案 5 :(得分:0)

我不认为这些答案中的任何一个都是理想的。我知道这已经晚了几年,但你想要做的是在收到JSONP响应时使用.ajax();方法的成功/错误回调选项。

我将如何构建此示例:

    // Call
    $.ajax({

      // URL you want to get
      url: 'http://example.com/json?callback=?',

      // Set a realistic time in milliseconds
      timeout: 3000,

      // Put in success callback function here, this example
      // shows you the data you got back from the call
      success: function(data) {
        console.log(data);
      },

      // Put in an error handling function, just an alert in this case
      error: function(badData) {
        alert('The call was unsuccessful');
      },

      type: 'POST'
    });