我使用以下代码从MVC视图进行Select2调用:
ajax: {
url: url,
delay: 150,
data: function (params) {
return GMK_Select2QueryData(params, 30, additionalData);
},
processResults: function (data, params) {
var resultsArr = [];
for (var i = 0; i < data.items.length; i++) {
resultsArr.push({
id: data.items[i].id,
text: data.items[i].text,
description: data.items[i].description,
data: data.items[i].data
});
}
return {
results: resultsArr,
pagination: {
more: data.more
}
};
},
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.status);
},
cache: false
}
我尝试捕获会话是否超时,然后将状态代码返回到&#34;错误&#34;功能,以便我可以在屏幕上弹出一些内容,说明他们需要重新登录。现在,我只是提醒屏幕进行测试。
我正在使用Web API ActionFilterAttribute,但是当我创建错误响应时,无论我做什么,jqXHR总是status = 0。
public class SessionActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext filterContext)
{
HttpContext ctx = HttpContext.Current;
if (ctx.Session == null || ctx.Session["user"] == null)
{
filterContext.Response = filterContext.Request.CreateErrorResponse(HttpStatusCode.RequestTimeout, "Session Timeout");
}
base.OnActionExecuting(filterContext);
}
}
答案 0 :(得分:0)
SessionActionFilter
动作过滤器非常完美。过滤器没问题
请按以下方式更新Select2电话: -
答案1: -
ajax: {
url: url,
delay: 150,
data: function (params) {
return GMK_Select2QueryData(params, 30, additionalData);
},
processResults: function (data, params) {
var resultsArr = [];
for (var i = 0; i < data.items.length; i++) {
resultsArr.push({
id: data.items[i].id,
text: data.items[i].text,
description: data.items[i].description,
data: data.items[i].data
});
}
return {
results: resultsArr,
pagination: {
more: data.more
}
};
},
params: {
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.status);
}
},
cache: false
}
可以通过以下方式获得错误
如果您只想处理响应错误,使用transport选项会导致select2中断,如下例所示。
transport: {
return $.ajax().error(function() {
alert("error fetching data");
});
}
还有另一种更简单的方法来处理错误。这是通过使用params选项,如下例所示。
params: {
error: function(response) {
alert("error fetching data");
}
}
希望它有所帮助。
请参考select2
另一个答案
在Select2.js文件中添加&#34;错误&#34;
的扩展名serach for text&#34; $ .extend(params &#34;
然后按照以下代码
更新扩展程序$.extend(params, {
url: url,
dataType: options.dataType,
data: data,
success: function (data) {
if (requestNumber < requestSequence) {
return;
}
// TODO - replace query.page with query so users have access to term, page, etc.
var results = options.results(data, query.page);
query.callback(results);
},
/* BEGIN added code */
error: function (jqXHR, status, error) {
if (requestNumber < requestSequence) {
return;
}
var r = null;
if (options.error) {
r = options.error(jqXHR, status, error);
}
query.callback(r || { results: [] });
} /* END added code */
});
您更新的ajax电话
ajax: {
url: url,
delay: 150,
data: function (params) {
return GMK_Select2QueryData(params, 30, additionalData);
},
processResults: function (data, params) {
var resultsArr = [];
for (var i = 0; i < data.items.length; i++) {
resultsArr.push({
id: data.items[i].id,
text: data.items[i].text,
description: data.items[i].description,
data: data.items[i].data
});
}
return {
results: resultsArr,
pagination: {
more: data.more
}
};
},
error: function (jqXHR, status, error) {
alert(error + ": " + jqXHR.responseText + ": " + jqXHR.status);
},
cache: false
}