2016-06-15 2 views
0

Die Webmethode (SaveSalaryDetails) im 2. Ajax-Aufruf wird nicht intermittierend aufgerufen. Wenn ich das Javascript jquery debugge, wird es gefeuert. Unten ist der Code:Ajax-Aufruf innerhalb eines anderen Ajax-Aufrufs in Jquery wird nicht intermittierend ausgelöst

function fnCheckAndSaveSalary() { 
    debugger; 
    var salary = document.getElementById(" <%=txtSelEmployeeSalary.ClientID %>").value; 
    var employeeID = $find("<%=rcmbEmployees.ClientID %>").get_value(); 
    var employeeName = $find("<%=rcmbEmployees.ClientID %>").get_text(); 
    var paidDate = $find("<%=radPayDate.ClientID %>").get_selectedDate(); 
    //var lblStatus = document.getElementById("<%=lblStatus.ClientID %>"); 
    //setTimeout(saveSalary, 15000); 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json;charset=utf-8', 
     datatype: 'json', 
     data: JSON.stringify({ EmpID: employeeID, PaidDate: paidDate }), 
     url: 'Pay.aspx/IsSalaryExisting', 
     success: function(response) { 
      debugger; 
      alert("Checked for records" + response.d); 
      //debugger; 
      //No record exists for the particular month and year for the employee 
      if (response.d == false) { 
       debugger; 
       alert("Now saving.."); 
       saveSalary(salary, employeeID, paidDate); 
      } 
      else { 
       //debugger; 
       alert('Salary already exists for Employee:' + employeeName + ' for date:' + paidDate); 
      } 
     }, 
     failure: function(response) { 
      alert(response.d); 
     } 
    }); 
} 

function saveSalary(salary, employeeID, paidDate) { 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json;charset=utf-8', 
     datatype: 'json', 
     data: JSON.stringify({ Salary: salary, EmpID: employeeID, PaidDate: paidDate }), 
     url: 'Pay.aspx/SaveSalaryDetails', 
     success: function(response) { 
      //debugger; 
      alert('Successfully saved'); 
     }, 
     failure: function(response) { 
      alert('Error in saving the salary details' + response.d); 
     } 
    }); 
} 


<form id="form1" runat="server"> 
<telerik:RadScriptManager runat="server" ID="RadScriptManager1" /> 
<div> 
<table> 
<tr> 
    <td>Select Employee:</td> 
    <td><telerik:RadComboBox ID="rcmbEmployees" runat="server" OnSelectedIndexChanged="rcmbEmployees_SelectedIndexChanged" AutoPostBack="true"></telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td>Salary: </td> 
    <td><asp:TextBox ID="txtSelEmployeeSalary" runat="server"></asp:TextBox> 
    </td> 
</tr> 
<tr> 
    <td>Pay Date:</td> 
    <td><telerik:RadMonthYearPicker ID="radPayDate" runat="server" 
    MinDate="1/1/2000" MaxDate="1/1/3000"></telerik:RadMonthYearPicker></td> 
</tr> 
</table> 
<asp:Button ID="btnSave" runat="server" Text="Save" OnClientClick="fnCheckAndSaveSalary()" /> 
<asp:Label ID="lblStatus" runat="server"></asp:Label> 
</div> 
</form> 

-Code hinter Datei:

[WebMethod] 
    public static int SaveSalaryDetails(string Salary, string EmpID, string PaidDate) 
    { 
     //saves details in the database and returns ID 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     return objEmpSalaryObj.PaymentID; 
    } 
    [WebMethod] 
    public static bool IsSalaryExisting(string EmpID, string PaidDate) 
    { 
     EmployeeController objController = new EmployeeController(); 
     EmployeePayHistoryVo objEmpSalaryObj = new EmployeePayHistoryVo(); 
     bool salaryExists = false; 
     try 
     { 
      objEmpSalaryObj.EmployeeID = Convert.ToInt32(EmpID); 
      objEmpSalaryObj.PaidMonth = (Convert.ToDateTime(PaidDate)).ToString("MMMM"); 
      objEmpSalaryObj.PaidYear = (Convert.ToDateTime(PaidDate)).Year; 

      salaryExists = objController.IsSalaryExisting(objEmpSalaryObj); 
      //System.Threading.Thread.Sleep(1000); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     return salaryExists; 
    } 
+0

Sie sind die "Jetzt speichern" Alarm bekommen, auch wenn es nicht angerufen wird? Und haben Sie Fehler in der Browserkonsole? – Rhumborl

+0

Nein. In der Konsole sind keine Fehler aufgetreten. Ich bekomme auch keine Benachrichtigungen. – Karts

+0

im Grunde können Sie nur die beiden Methoden in einem kombinieren .. –

Antwort

0

Backend

[WebMethod] 
    public static int IsSalaryExisting(string EmpID, string PaidDate, string Salary) 
    { 

     EmployeeController objController = new EmployeeController(); 
     EmployeePayHistoryVo objEmpSalaryObj = new EmployeePayHistoryVo(); 
     var salaryExists = 0; 
     try 
     { 
      objEmpSalaryObj.EmployeeID = Convert.ToInt32(EmpID); 
      objEmpSalaryObj.PaidMonth = (Convert.ToDateTime(PaidDate)).ToString("MMMM"); 
      objEmpSalaryObj.PaidYear = (Convert.ToDateTime(PaidDate)).Year; 

      return !objController.IsSalaryExisting(objEmpSalaryObj) ? SaveSalaryDetails(Salary, EmpID, PaidDate) : 0; 
      //System.Threading.Thread.Sleep(1000); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     return salaryExists; 
    } 

Ihr JS-Code

function fnCheckAndSaveSalary() { 
    debugger; 
    var salary = document.getElementById(" <%=txtSelEmployeeSalary.ClientID %>").value; 
    var employeeID = $find("<%=rcmbEmployees.ClientID %>").get_value(); 
    var employeeName = $find("<%=rcmbEmployees.ClientID %>").get_text(); 
    var paidDate = $find("<%=radPayDate.ClientID %>").get_selectedDate(); 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json;charset=utf-8', 
     datatype: 'json', 
     data: JSON.stringify({ EmpID: employeeID, PaidDate: paidDate }), 
     beforeSend: function(){ 
      alert("Now saving.."); 
     }, 
     url: 'Pay.aspx/IsSalaryExisting', 
     success: function(response) { 
      debugger; 
      alert("Checked for records" + response.d); 
      //debugger; 
      //No record exists for the particular month and year for the employee 
      if (response.d > 0) { 
       debugger; 
       alert('Successfully saved');     
      } 
      else { 
       //debugger; 
       alert('Salary already exists for Employee:' + employeeName + ' for date:' + paidDate); 
      } 
     }, 
     failure: function(response) { 
      alert(response.d); 
     } 
    }); 
} 
+0

überprüfen Sie einfach die Antwort, wenn es eine Eigenschaft "d" hat, sonst können Sie das Ergebnis in "Antwort" selbst –

+0

Vielen Dank, änderte ich den Code wie Sie vorgeschlagen. Jetzt habe ich nur einen Ajaxruf. Es wird "Nowsaving" -Alarm angezeigt, jedes Mal bevor die Methode aufgerufen wird. Aber nachdem die Methode "IsSalaryExisting" aufgerufen wurde, werden die Warnmeldungen im Erfolgsteil ("Checked for records") immer noch nicht angezeigt. – Karts

+0

versuchen, modales Bootstrap-Dialogfeld anstelle von Alert zu verwenden. –

Verwandte Themen