在旧的ajax正在进行时阻止新的ajax请求

时间:2015-05-26 20:52:06

标签: javascript jquery ajax

我正在尝试编写在滚动时从服务器获取数据的函数。我将不得不写一个像这样的函数......

         function onscrollend()
         {
           $.ajax({
         });
         }

我现在对如何检查正在进行的旧.ajax()通话感到困惑。这样我就可以取消新的了。我很困惑因为每次调用该函数时如何检查以前的调用状态..我可以访问上一次调用的变量吗?

2 个答案:

答案 0 :(得分:1)

$.ajax()返回promise,其中公开readyState属性,因此您只需将$.ajax()调用的返回值分配给变量并检查其{{1} }}

readyState

然后只有在前一个调用完成后才会触发ajax调用(var xhr = {}; function onscrollend() { if(xhr.readyState === 4) { xhr = $.ajax({ // .. }); } } )。

答案 1 :(得分:1)

你可以像这样设置一个标志:

private async Task Test() {
    const string applicationURL = @"https://xxxx.azure-mobile.net/";
    const string applicationKey = @"xxxx";  

    CurrentPlatform.Init();

    var client = new MobileServiceClient(applicationURL, applicationKey);

    string path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "store.db");

    if (!File.Exists(path)) {
        File.Create(path).Dispose();
    }

    var store = new MobileServiceSQLiteStore(path);
    store.DefineTable<Product>();

    await client.SyncContext.InitializeAsync(store);

    var productTable = client.GetSyncTable<Product>();

    try {
        await client.SyncContext.PushAsync();
        await productTable.PullAsync("allProducts", productTable.CreateQuery());
        var t = await productTable.ToListAsync();
        Console.WriteLine("Product Count : " + t.Count);        
    }
    catch (Java.Net.MalformedURLException ex) {
        Console.WriteLine(ex.Message);
    }
    catch (Exception e) {
        Console.WriteLine(e.Message);
    }
}