Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 临时禁用数据表上的服务器处理_Jquery_Ajax_Server_Datatables - Fatal编程技术网

Jquery 临时禁用数据表上的服务器处理

Jquery 临时禁用数据表上的服务器处理,jquery,ajax,server,datatables,Jquery,Ajax,Server,Datatables,我有一个由服务器端数据加载的数据表,这一切都可以。现在,我想通过侦听来自AWS SQS的通知来更新数据行,当我获得新行数据并添加到表API中,然后调用“draw”方法时,API会从服务器端触发ajax刷新(表是通过服务器进程设置的) 有没有一种方法可以暂时“禁用”ajax调用?因为,我不想一直禁用,我希望服务器端处理分页和搜索,只想添加新行而不调用服务器 我试试这个: var table=$('#tblModel')。DataTable();//获取API对象 //初始化Amazon Cogni

我有一个由服务器端数据加载的数据表,这一切都可以。现在,我想通过侦听来自AWS SQS的通知来更新数据行,当我获得新行数据并添加到表API中,然后调用“draw”方法时,API会从服务器端触发ajax刷新(表是通过服务器进程设置的)

有没有一种方法可以暂时“禁用”ajax调用?因为,我不想一直禁用,我希望服务器端处理分页和搜索,只想添加新行而不调用服务器

我试试这个:

var table=$('#tblModel')。DataTable();//获取API对象
//初始化Amazon Cognito凭据提供程序
AWS.config.region='us-west-2';//区域
/**
*获取用户的标识
*/
$.getJSON(“/cognito”,函数(数据){
如果(数据){
IdentityId=data.IdentityId;
AWS.config.credentials=新的AWS.CognitoIdentityCredentials({
IdentityPoolId:IdentityPoolId,
IdentityId:data.IdentityId,
登录:{
“cognito identity.amazonaws.com”:data.Token
}
});
var queue=new AWS.SQS({params:{QueueUrl:QueueUrl,WaitTimeSeconds:20}});//使用url排队
获取消息(队列);
}
});
/**
*从SQS获取消息
*/
函数getMessages(队列){
queue.receiveMessage(函数(错误,数据){
如果(数据){
if(data.Messages.length==0)返回;
试一试{
//这里添加一行或多行,但它会触发从服务器端刷新数据的调用。
如果(data.Messages.length>1)
table.rows.add(data.Messages.map(transformMessage)).draw();
其他的
table.row.add(transformMessage(data.Messages[0])).draw();
//现在删除这些消息
queue.deleteMessageBatch({
QueueUrl:QueueUrl,
条目:data.Messages.map(函数(消息){
返回{
Id:Message.MessageId,
ReceiptHandle:Message.ReceiptHandle
};
})
},函数(错误,数据){
if(err)控制台错误(err);
});
获取消息(队列);
}捕获(e){
控制台错误(e);
}
}
});
}

我得到了解决方案,如果有人想要:如果要临时禁用ajax,请求必须设置两个设置标志:oFeatures.bServerSide和ajax

//此处临时禁用ajax
table.settings()[0].oFeatures.bServerSide=false;
table.settings()[0]。ajax=false;
如果(data.Messages.length>1)
table.rows.add(data.Messages.map(transformMessage)).draw();
其他的
table.row.add(transformMessage(data.Messages[0])).draw();
//这里再次激活它
table.settings()[0].oFeatures.bServerSide=true;
table.settings()[0].ajax=sUrlServerList;

您不能只使用一个存储是否应该执行ajax的
布尔变量吗?然后,每当您想打开或关闭ajax时,设置
boolean
,并检查运行ajax的函数中的
boolean
。@KevinWorkman这似乎就是答案IMHO@KevinWorkman我不这么认为,因为在DataTables中,ajax特性是在安装时激活的:$('tblModel')。dataTable({ajax:“/path/to/data”,…});为了获得数据,在页面呈现中必须是这样的。所以,这不是那么容易,我想我有一些“逻辑问题”“使用此解决方案,它禁用了表,但也重置了有关分页的信息。非常好!你节省了我很多时间!这是工作!卓越的。你是国王。什么是sUrlServerList@GroverManuelCamposAncajima