2015-10-07 75 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'); 
} 
相關問題