日期:2014-05-18  浏览次数:20425 次

正则取出数据 异步执行增加到数据库,导至数据库阻塞
//循环取出正则匹配的数据

while ((result = regPage.exec(strHtml)) != null) {
  if (result[3] != "提示") {
  $("#tta").val($("#tta").val() + pagekid+ "---" + urlpath + result[1] + "---" + result[3] + "\n");


  //异步处理增加到数据库,发生数据库阻塞

  $.post("JsWebPage.aspx",
  { PageId: pagekid,
  PageName: result[3],
  PageUrl: urlpath + result[1],
  flag: "a"
  },
  function(data) {

  }, "text"
  );

  }
  setTimeout("", 5000); //延时

  }

因为是异步处理,循环发生的太快,来不及增加到数据库,下一次循环又开始了,所以老是让数据库发生阻塞(OPEN了很多个连接),请问这种情况怎么处理,请大虾指点,我写了一个延时都没用

------解决方案--------------------
JScript code

function submitData() {
    var arr = [];
    var i = 0;
    //循环取出正则匹配的数据
    while (i++ < 10) {
        arr.push({ pageid: i, pagename: 'test' + i, pageurl: '' });
    }
    //异步处理增加到数据库
    postData(0);

    function postData(idx) {
        if (idx < arr.length) {
            $.post('jswebpage.aspx', arr[idx], function () {
                postData(idx + 1);
            });
            
        }
    }
}
submitData();

------解决方案--------------------
1、你说数据库阻塞你怎么知道的?
会不会是数据库连接未关闭呢?

2、你应该把要插入的数据先加到一个数组。
然后再将这个数组中的数据一次性提交,这样是不是更有效率。


------解决方案--------------------
我一般做ajax时都是设置了一个变量判断是否正在执行ajax 如果是true就不执行 不然就传一个数组或者json给后台吧