关于jquery Ajax加锁的问题

gwf25sz 2011-09-02 05:22:06
以下是部分主要代码:
function FillSupplier(selectOB)
{
var mid = selectOB.parents("tr").find("input:hidden:first").val();
$.ajax({
url:"../JqueryHandler.ashx",
type:"post",
data:{PAction:"FillSupplier",PMid:mid},
success:function (data) {
var json = eval(data);
selectOB.empty();
for(var ind in json){
selectOB.append($("<option value='" + json[ind].ID + "'>" + json[ind].Names + "</option>"));
selectOB.parent().parent().find(".Sprice").text(selectOB.val().split('-')[1]);
selectOB.parent().parent().find(".MPrice").val(selectOB.val().split('-')[1]);
}
}
});
}


JqueryHandler.ashx
if (context.Request["PAction"].Trim() == "FillSupplier")
{
sql = string.Format("select A.*,B.Names SName"
+ " FROM Sy_MaterielSupplier A,Sy_Supplier B"
+ " WHERE Supplier = B.ID"
+ " AND Materiel = {0}", context.Request["PMid"].Trim());
DataTable dt = DBBase.GetDataTable(sql);

StringBuilder sb = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
{
sb.Append("{");
sb.AppendFormat("\"ID\":\"{0}\",\"Names\":\"{1}\"", dt.Rows[i]["ID"].ToString() + "-" + dt.Rows[i]["Price"].ToString(), dt.Rows[i]["SName"].ToString());
sb.Append("},");
}
context.Response.Write("[" + sb.ToString().TrimEnd(',') + "]");
}



上面的ajax如果单次调用没问题,但如果循环多次调用就会有部分无法获取到数据。发现跟数据库和网站的速度有关。
所以我想在JqueryHandler.ashx内部用Application来加锁,当然“一般处理程序(.ashx)”内部是无法使用Session、Application等的。
所以在此发帖想问下,有没有其它方法可以达到同样的效果。
PS:不要js的定时方法,因为定时的话,短了那么还会出现上面的情况,长了数据量大时要等死人的。

求高手解答。
有合适答案立即结贴,这个可以放心。
...全文
274 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gwf25sz 2011-09-09
  • 打赏
  • 举报
回复
用别的方法解决了,没用锁。
  • 打赏
  • 举报
回复
我从这个随意抛出“锁”的思路中,看到了一种危险,跟一个人的技术无关,而是跟思维习惯有关。
  • 打赏
  • 举报
回复
[Quote=引用楼主 gwf25sz 的回复:]
但如果循环多次调用就会有部分无法获取到数据。发现跟数据库和网站的速度有关。
所以我想在JqueryHandler.ashx内部用Application来加锁[/Quote]

你还是搞明白为什么“有部分无法获取到数据”吧,这个最重要。然后,考虑合适的数据缓存策略,来避免额外读取数据库。


去搞“锁”在这里是很晕乎的思路,希望在正式谁一个产品时这种花招在你脑海中越少越好。要真正解决问题,要用“正招”才行。
kkbac 2011-09-02
  • 打赏
  • 举报
回复
js里面控制, 当前的ajax调用完成的方法里面加上下一个调用的方法.
huangwenquan123 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 gwf25sz 的回复:]
以下是部分主要代码:

JScript code
function FillSupplier(selectOB)
{
var mid = selectOB.parents("tr").find("input:hidden:first").val();
$.ajax({
url:"../Jq……
[/Quote]你可以等他返回成功后继续调用。什么时候结束那些自己控制。
rczjp 2011-09-02
  • 打赏
  • 举报
回复
public class Handler : IHttpHandler, IRequiresSessionState
继承IRequiresSessionState接口就可以SESSION了
子夜__ 2011-09-02
  • 打赏
  • 举报
回复
不好意思发错了。
子夜__ 2011-09-02
  • 打赏
  • 举报
回复

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧