如果请求发送得太快,则jQuery post方法失败

时间:2017-05-29 13:02:49

标签: javascript jquery ajax asp.net-mvc razor

我的 _Layout.cshtml

中有以下下拉列表
@Html.DropDownList("myList", 
new SelectList(apps, "AppId", "Name", ViewBag.AppId),
new {@class = "mySelectBox", onchange = "updateAppLayout(this);"})

javscript函数在单独的.js文件中:

function updateAppLayout(sel) {
var name = sel.options[sel.selectedIndex].text;
var appId = sel.options[sel.selectedIndex].value;
var data = { "appname": name, "appId": appId };
var url = "/Test/TestLayout";    
$.post(url, data)
    .done(function(msg) {})
    .fail(function (xhr, status, error) {          

    });
}

每当我更快地更改下拉值时,都会调用 .fail() 方法。我在 .fail() 方法中放置了一个控制台,用于 sel 值,它给出了这个值 - >的 select#myList.mySelectBox 但如果我在 $.post 方法之前有控制台,我会得到下拉列表。 不知道这里有什么不对。 PS:我不想使用 setTimeout

1 个答案:

答案 0 :(得分:0)

我会在加载时禁用选择列表,这样你就可以确保它只会在第一个返回时获得新值

function updateAppLayout(sel) {
var name = sel.options[sel.selectedIndex].text;
var appId = sel.options[sel.selectedIndex].value;
document.getElementById("myList").disabled = true;

var data = { "appname": name, "appId": appId };
var url = "/Test/TestLayout";    
$.post(url, data)
    .done(function(msg) {
document.getElementById("myList").disabled = false;
//do something 
})
    .fail(function (xhr, status, error) {          

    });
}