22

我正在使用 jQuerygetJSON()函数。这个函数获取数据没有问题。但有时等待,等待等待......我的加载栏在页面中心显示加载加载加载。所以jQueryajax()函数有一个超时变量。但我想使用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();
    });
4

6 回答 6

17

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

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

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

于 2013-01-09T15:30:22.290 回答
17

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

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

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

于 2013-01-09T15:30:27.220 回答
12

正如 lethal-guitar 提到getJSON()的那样,function 只是$.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
    }
});
于 2013-01-09T15:40:38.220 回答
3

也总是有核路线:

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

这会将你的程序发出的所有 AJAX 请求(甚至通过 $.getJSON)设置为 10 秒(或者你有什么)。

于 2014-03-02T20:25:06.703 回答
1

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

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();
    });
于 2013-01-09T15:33:39.127 回答
1

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

我将如何构建它的示例:

    // 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'
    });
于 2015-09-09T19:32:04.533 回答