2015-10-07 59 views
0

我正在开发一个Asp.net项目。 我想使用jquery ajax插入所有的gridview记录到数据库。这里是我的代码如何在所有记录插入到数据库后显示警报消息

function Insert() { 
     var Grid = document.getElementById('<%=gvMyGrid.ClientID%>'); 
     var Value={}; 
     for (var i = 1; i < Grid.rows.length; i++) { 
      Value.Sr = Grid.rows[i].cells[0].innerText; 
      Value.Name = Grid.rows[i].cells[1].innerText; 
      Value.Marks = Grid.rows[i].cells[2].children[0].value; 
      $.ajax({ 
       type: "POST", 
       url: "Default.aspx/Insert", 
       data: '{Value:' + JSON.stringify(Value) + '}', 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (response) { 
       } 
      }); 
     } 
     alert('Saved Successfully'); 
    } 

它工作正常,但我想它显示警报消息(“保存成功”)之后的所有行成功地插入。

但问题是,当有很多行在插入所有行之前显示警告消息。

请帮忙......

+0

在旁注:你可能会更好地调用插入服务只有一次。将所有Value的值保存到一个数组中,并将它们全部传递给Insert函数一次,而不必费心计算客户端上成功插入的次数。 – Culme

+0

是的,这是我猜想的更好的主意。但我不知道如何从.ajax调用发送数组,并在服务器端的数据库中接收它。 请你帮忙吗? –

回答

1
function Insert() { 
    var Grid = document.getElementById('<%=gvMyGrid.ClientID%>'); 
    var Value={}; 
var count=0; 
    for (var i = 1; i < Grid.rows.length; i++) { 
     Value.Sr = Grid.rows[i].cells[0].innerText; 
     Value.Name = Grid.rows[i].cells[1].innerText; 
     Value.Marks = Grid.rows[i].cells[2].children[0].value; 
     $.ajax({ 
      type: "POST", 
      url: "Default.aspx/Insert", 
      data: '{Value:' + JSON.stringify(Value) + '}', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 
       count=count+1;  
      } 
     }); 
    } 
if(count==Grid.rows.length) 
{ 
    alert('Saved Successfully'); 
} 
} 
+0

我不想投票,但请注意:如果插入方法有任何一点滞后,在完成所有异步ajax调用之前,您可能会很好地执行检查“if(count == Grid.rows.length)”。在这种情况下,即使没有错误发生,您也不会看到成功消息。 – Culme

0

使用success:callback来确定插入完成的时间。

每次调用成功回调时递增计数器变量,当计数器等于“Grid.rows.length”时,显示成功消息。

+0

嗨@Culme 感谢您的回复。其实我试过你的想法,但不幸的是它不工作:( –

+0

我认为这是来自Kaushik和Stefan的答复的混合使用来自Kaushiks例子的“count”变量,但是在成功中评估它:像Stefan's anser 。事情是这样的: 成功:函数(响应){ 计数=计数+ 1;} ; 如果(计数== Grid.rows.length){警报('成功!)}如果 还记得,任何插入失败,信息将不会显示 – Culme

0

您可以在ajax函数i jQuery(http://api.jquery.com/jquery.ajax/)上使用成功回调。

在回调中,检查它是否是最后一行,如果是,则发送成功消息。

试试这个代码(未测试)。

function Insert() { 
    var Grid = document.getElementById('<%=gvMyGrid.ClientID%>'); 
    var Value={}; 
    for (var i = 1; i < Grid.rows.length; i++) { 
     Value.Sr = Grid.rows[i].cells[0].innerText; 
     Value.Name = Grid.rows[i].cells[1].innerText; 
     Value.Marks = Grid.rows[i].cells[2].children[0].value; 
     $.ajax({ 
      type: "POST", 
      url: "Default.aspx/Insert", 
      data: '{Value:' + JSON.stringify(Value) + '}', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 
       if (i == Grid.rows.length-1) { 
        alert('Saved Successfully'); 
       } 
      } 
     }); 
    } 
} 
+0

I @Stefan 感谢您的回复我已经尝试过您的想法,但不幸的是它无法正常工作,我提醒了我(i)成功:但我发现这个值我不是连续的,它显示了我喜欢这个值1,4,7,2,12,22 –

+0

当然我不工作。抱歉! 将if条件更改为: if(i == Grid.rows.length-1){ 您必须采用一个frem长度,因为它和链接。 而这些代码的顺序是不重要的,这个代码:) –

+0

我已经更新了代码更改的答案 - 检查出来:) –

0

试试这个,因为Ajax调用是异步的,他不`吨等待回应,将直接执行下一条语句所以使用XMLHttpRequest进行同步连接

function doPostAjax(requestURL,formData,callback){ 
     var xmlhttp; 
     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
       var jText = JSON.parse(xmlhttp.responseText); 
       callback(jText); 
      }else if(xmlhttp.readyState==4 && xmlhttp.status!=200){ 
       handleError(xmlhttp.status); 
       disableAjaxLoadingImageDiv(); 
      } 
     } 
     xmlhttp.open("POST",requestURL,true); 
     xmlhttp.setRequestHeader("Cache-Control", "no-cache"); 
     xmlhttp.send(formData);  
} 
+0

Hi @Vishnu Katpure 感谢您的回复。你能回答我的情况相同的代码? –

0

Shaiwal Tripathi选中此项,按您的要求

function Insert() { 
    var Grid = document.getElementById('<%=gvMyGrid.ClientID%>'); 
    var Value={}; 
    var xmlhttp; 
    for (var i = 1; i < Grid.rows.length; i++) { 
     Value.Sr = Grid.rows[i].cells[0].innerText; 
     Value.Name = Grid.rows[i].cells[1].innerText; 
     Value.Marks = Grid.rows[i].cells[2].children[0].value; 

     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
       //every Success message 
      }else if(xmlhttp.readyState==4 && xmlhttp.status!=200){ 
       //anyone record false 
      } 
     } 
     xmlhttp.open("POST",requestURL,true); 
     xmlhttp.setRequestHeader("Cache-Control", "no-cache"); 
     xmlhttp.send('{Value:' + JSON.stringify(Value) + '}'); 
    } 
    alert('Saved Successfully'); 
}