2015-10-07 2 views
0

Я работаю над проектом Asp.net. Я пытаюсь вставить все записи gridview в базу данных, используя 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) { 
       } 
      }); 
     } 
     alert('Saved Successfully'); 
    } 

Это работает нормально, но я хочу, чтобы отобразить его предупредительное сообщение («Сохранено») после того, как все строки вставки успешно.

Но проблема в том, что есть много строк, на которых отображается предупреждающее сообщение, прежде чем вставлять все строки.

Пожалуйста, помогите ......

+0

На боковой ноте: вам, вероятно, будет лучше позвонить в службу Insert e только один раз. Сохраните все значения в массиве и передайте их все в функцию 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

Я не хочу проголосовать, но заметьте: если метод Insert любой бит задержки, вы можете очень хорошо выполнить проверку «if (count == Grid.rows.length)» до того, как все асинхронные вызовы ajax завершились. В этом случае вы не увидите сообщение об успешном завершении, даже если ошибки не возникнут. – Culme

0

Используйте успех: обратный вызов, чтобы определить, когда вставка завершена.

Приращение переменной счетчика каждый раз, когда вызывается обратный вызов успеха, и когда счетчик равен «Grid.rows.length», покажите сообщение об успешном завершении.

+0

Привет @Culme Спасибо за ваш ответ. На самом деле я попробовал вашу Идею, но, к сожалению, она не работает :( –

+0

То, как я думал, представляет собой смесь ответов от Kaushik и Stefan. Используйте переменную «count» из примера Kaushiks, но оцените ее в успехе: callback, как в anser Stefan . Что-то вроде этого: успех: функция (ответ) { кол = кол + 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) в успех: но я нашел это значение i не находится в строке. Он показывает значение i, как это, 1, 4, 7, 2, 12, 22 –

+0

Конечно, i t не работает. Сожалею! Измените условие if на: if (i == Grid.rows.length-1) { Вам нужно будет взять одну длину длины, потому что это и ссылка. И этот код не имеет значения с этим кодом :) –

+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

Привет @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'); 
} 
Смежные вопросы