Search code examples
jqueryasp.netajaxalertajaxform

Page reloads before hitting the server side processing page. Any ideas why?


The following code is using JSON object with several ajax calls to a webmethod that posts data to the database.

The issue we are having is when I click the submit button, the page reloads before data is processed thereby causing an error that says @paremeter is required but not supplied. This happens to all the form fields that are being passed to asp.net codebehind for processing.

I am having difficulty figuring out why this is happening.

Does anyone have any ideas?

                        function getAllEmpData() {
                            var data = [];
                            $('tr.data-contact-person0').each(function () {
                                var ename = $(this).find('.employeename01').val();
                                var etitle = $(this).find('.employeetitle01').val();
                                var email = $(this).find('.employeeemail01').val();
                                var alldata = {
                                    'emplName': ename,
                                    'emplTitle': etitle,
                                    'empMail': email
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }

                        function getAllSourcepData() {
                            var data = [];
                            $('tr.data-contact-person1').each(function () {
                                var sname = $(this).find('.sourcename01').val();
                                var saddress = $(this).find('.sourceaddress01').val();
                                var sincome = $(this).find('.sourceincome01').val();
                                var alldata = {
                                    'mySource': sname,
                                    'mySAddress': saddress,
                                    'mySIncome': sincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }

                        function getAllSpouseData() {
                            var data = [];
                            $('tr.data-contact-person2').each(function () {
                                var spname = $(this).find('.spousename01').val();
                                var spaddress = $(this).find('.spouseaddress01').val();
                                var spincome = $(this).find('.spouseincome01').val();
                                var alldata = {
                                    'mySpouse': spname,
                                    'mySPAddress': spaddress,
                                    'mySPIncome': spincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        function getAllDividentData() {
                            var data = [];
                            $('tr.data-contact-person3').each(function () {
                                var divname = $(this).find('.dividentname01').val();
                                var divaddress = $(this).find('.dividentaddress01').val();
                                var divincome = $(this).find('.dividentincome01').val();
                                var alldata = {
                                    'myDivName': divname,
                                    'myDivAddress': divaddress,
                                    'myDivIncome': divincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        function getAllReimbursedData() {
                            var data = [];
                            $('tr.data-contact-person4').each(function () {
                                var reimname = $(this).find('.reimbursmentname01').val();
                                var reimaddress = $(this).find('.reimbursmentaddress01').val();
                                var reimincome = $(this).find('.reimbursmentincome01').val();
                                var alldata = {
                                    'myReimbursName': reimname,
                                    'myReimbursAddress': reimaddress,
                                    'myReimbursIncome': reimincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        function getAllHonorariaData() {
                            var data = [];
                            $('tr.data-contact-person5').each(function () {
                                var honorname = $(this).find('.inputHonoraria01').val();
                                var alldata = {
                                    'myHonorname': honorname
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        function getAllGiftData() {
                            var data = [];
                            $('tr.data-contact-person6').each(function () {
                                var gifname = $(this).find('.giftname01').val();
                                var gifaddress = $(this).find('.giftaddress01').val();
                                var gifincome = $(this).find('.giftincome01').val();
                                var alldata = {
                                    'myGiftname': gifname,
                                    'myGiftaddress': gifaddress,
                                    'myGiftincome': gifincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        function getAllOrgData() {
                            var data = [];
                            $('tr.data-contact-person7').each(function () {
                                var orgsname = $(this).find('.orgname01').val();
                                var orgsaddress = $(this).find('.orgaddress01').val();
                                var orgsincome = $(this).find('.orgincome01').val();
                                var alldata = {
                                    'myOrgname': orgsname,
                                    'myOrgaddress': orgsaddress,
                                    'myOrgincome': orgsincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        function getAllCreditorData() {
                            var data = [];
                            $('tr.data-contact-person8').each(function () {
                                var creditname = $(this).find('.creditorname01').val();
                                var creditaddress = $(this).find('.creditoraddress01').val();
                                var creditincome = $(this).find('.creditorincome01').val();
                                var alldata = {
                                    'myCreditorname': creditname,
                                    'myCreditoraddress': creditaddress,
                                    'myCreditorincome': creditincome
                                }
                                data.push(alldata);
                            });
                            console.log(data);
                            return data;
                        }
                        $("#btnSubmit").click(function () {
                            var empComplete = false, sourceComplete = false, spouseComplete = false, dividentComplete = false, reimbursedComplete = false, honorariaComplete = false, giftComplete = false, orgComplete = false, creditorComplete = false;
                            function checkComplete() {
                                if (empComplete && sourceComplete && spouseComplete && dividentComplete && reimbursedComplete && honorariaComplete && giftComplete && orgComplete && creditorComplete) {
                                    $("#result").text("All complete");
                                }
                            }
                            $("#result").text("");
                            var data = JSON.stringify(getAllEmpData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveEmpData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    empComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllSourcepData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveSourceData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    sourceComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllSpouseData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveSpousData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    spouseComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllDividentData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveDividentData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    dividentComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllReimbursedData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveReimbursedData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    reimbursedComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllHonorariaData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveHonorariaData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    honorariaComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllGiftData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveGiftData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    giftComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllOrgData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveOrgData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    orgComplete = true;
                                    checkComplete();
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            var data = JSON.stringify(getAllCreditorData());
                            console.log(data);
                            $.ajax({
                                url: 'closures.aspx/SaveCreditorData',
                                type: 'POST',
                                contentType: 'application/json; charset=utf-8',
                                data: JSON.stringify({ 'empdata': data }),
                                success: function () {
                                    creditorComplete = true;
                                    checkComplete();
                                }
                             });
                         });

//Webmethods on codebehind:

<WebMethod(EnableSession:=True)> _
    Public Shared Function SaveEmpData(empdata As String) As String
        Dim serializedData = JsonConvert.DeserializeObject(Of List(Of Employee))(empdata)
        Using con = New SqlConnection(Constr)
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            '  Dim cmdGetKey As New SqlCommand("Select Max(employeeID) From Employees", con)
            '  Dim ID As Integer = cmdGetKey.ExecuteScalar()

            For Each data As Employee In serializedData
                Using cmd1 = New SqlCommand("INSERT INTO Employees(EmployeeName,empTitle,email) Values (@ename, @title,@email)")
                    cmd1.CommandType = CommandType.Text
                    cmd1.Parameters.AddWithValue("@ename", data.emplName)
                    cmd1.Parameters.AddWithValue("@title", data.emplTitle)
                    cmd1.Parameters.AddWithValue("@email", data.empMail)
                    cmd1.Connection = con
                    cmd1.ExecuteNonQuery()
                    Dim cmdGetKey As New SqlCommand("SELECT @@IDENTITY", con)
                    Dim ID As Integer = cmdGetKey.ExecuteScalar()
                    HttpContext.Current.Session("empID") = ID
                End Using
            Next
            con.Close()
        End Using
        Return Nothing
    End Function

    <WebMethod(EnableSession:=True)> _
    Public Shared Function SaveSourceData(empdata As String) As String
        '  Dim ID As Integer = HttpContext.Current.Session("empID")
        Dim serializedData = JsonConvert.DeserializeObject(Of List(Of SourcDetails))(empdata)
        Using con = New SqlConnection(Constr)
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            '  Dim cmdGetKey As New SqlCommand("Select Max(employeeID) From Employees", con)
            '  Dim ID As Integer = cmdGetKey.ExecuteScalar()

            For Each data As SourcDetails In serializedData
                Using cmd = New SqlCommand("INSERT INTO SourceDetails(sourcename, sourceaddress, sourceincome,employeeID) VALUES(@sname, @saddress,@sincome, @ID)")
                    cmd.CommandType = CommandType.Text
                    cmd.Parameters.AddWithValue("@sname", data.mySource)
                    cmd.Parameters.AddWithValue("@saddress", data.mySAddress)
                    cmd.Parameters.AddWithValue("@sincome", data.mySIncome)
                    cmd.Parameters.AddWithValue("@ID", HttpContext.Current.Session("empID"))
                    '  cmd.Parameters.AddWithValue("@CreatedDate", DateTime.Now)
                    cmd.Connection = con
                    cmd.ExecuteNonQuery()
                End Using
            Next
            con.Close()
        End Using
        Return Nothing
    End Function
    <WebMethod(EnableSession:=True)> _
    Public Shared Function SaveSpousData(empdata As String) As String
        '  Dim ID As Integer = HttpContext.Current.Session("empID")
        Dim serializedData = JsonConvert.DeserializeObject(Of List(Of SpousDetails))(empdata)
        Using con = New SqlConnection(Constr)
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            '  Dim cmdGetKey As New SqlCommand("Select Max(employeeID) From Employees", con)
            '  Dim ID As Integer = cmdGetKey.ExecuteScalar()

            For Each data As SpousDetails In serializedData
                Using cmd2 = New SqlCommand("INSERT INTO SpouseDetails(spousename, spouseaddress, spouseincome,employeeID) VALUES(@spname, @spaddress,@spincome, @ID)")
                    cmd2.CommandType = CommandType.Text
                    cmd2.Parameters.AddWithValue("@spname", data.mySpouse)
                    cmd2.Parameters.AddWithValue("@spaddress", data.mySPAddress)
                    cmd2.Parameters.AddWithValue("@spincome", data.mySPIncome)
                    cmd2.Parameters.AddWithValue("@ID", HttpContext.Current.Session("empID"))
                    '  cmd.Parameters.AddWithValue("@CreatedDate", DateTime.Now)
                    cmd2.Connection = con
                    cmd2.ExecuteNonQuery()
                End Using
            Next
            con.Close()
        End Using
        Return Nothing
    End Function
    <WebMethod(EnableSession:=True)> _
    Public Shared Function SaveDividentData(empdata As String) As String
        '  Dim ID As Integer = HttpContext.Current.Session("empID")
        Dim serializedData = JsonConvert.DeserializeObject(Of List(Of DividentDetails))(empdata)
        Using con = New SqlConnection(Constr)
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            '  Dim cmdGetKey As New SqlCommand("Select Max(employeeID) From Employees", con)
            '  Dim ID As Integer = cmdGetKey.ExecuteScalar()

            For Each data As DividentDetails In serializedData
                Using cmd3 = New SqlCommand("INSERT INTO DividentDetails(dividentName, dividentAddress, dividentAmount,employeeID) VALUES(@divname, @divaddress,@divincome, @ID)")
                    cmd3.CommandType = CommandType.Text
                    cmd3.Parameters.AddWithValue("@divname", data.myDivName)
                    cmd3.Parameters.AddWithValue("@divaddress", data.myDivAddress)
                    cmd3.Parameters.AddWithValue("@divincome", data.myDivIncome)
                    cmd3.Parameters.AddWithValue("@ID", HttpContext.Current.Session("empID"))
                    '  cmd.Parameters.AddWithValue("@CreatedDate", DateTime.Now)
                    cmd3.Connection = con
                    cmd3.ExecuteNonQuery()
                End Using
            Next
            con.Close()
        End Using
        Return Nothing
    End Function
    <WebMethod(EnableSession:=True)> _
    Public Shared Function SaveReimbursedData(empdata As String) As String
        '  Dim ID As Integer = HttpContext.Current.Session("empID")
        Dim serializedData = JsonConvert.DeserializeObject(Of List(Of ReimbursedDetails))(empdata)
        Using con = New SqlConnection(Constr)
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            '  Dim cmdGetKey As New SqlCommand("Select Max(employeeID) From Employees", con)
            '  Dim ID As Integer = cmdGetKey.ExecuteScalar()

            For Each data As ReimbursedDetails In serializedData
                Using cmd4 = New SqlCommand("INSERT INTO ReimbursementDetails(reimbursementName, reimbursementAddress, reimbursementAmount,employeeID) VALUES(@reimbursename, @reimburseaddress,@reimburseincome, @ID)")
                    cmd4.CommandType = CommandType.Text
                    cmd4.Parameters.AddWithValue("@reimbursename", data.myReimbursName)
                    cmd4.Parameters.AddWithValue("@reimburseaddress", data.myReimbursAddress)
                    cmd4.Parameters.AddWithValue("@reimburseincome", data.myReimbursIncome)
                    cmd4.Parameters.AddWithValue("@ID", HttpContext.Current.Session("empID"))
                    '  cmd.Parameters.AddWithValue("@CreatedDate", DateTime.Now)
                    cmd4.Connection = con
                    cmd4.ExecuteNonQuery()
                End Using
            Next
            con.Close()
        End Using
        Return Nothing
    End Function

Public Class Employee
    Public Property emplName() As String
        Get
            Return m_empName
        End Get
        Set(value As String)
            m_empName = value
        End Set
    End Property
    Private m_empName As String
    Public Property emplTitle() As String
        Get
            Return m_empTitle
        End Get
        Set(value As String)
            m_empTitle = value
        End Set
    End Property
    Private m_empTitle As String
    Public Property empMail() As String
        Get
            Return m_empMail
        End Get
        Set(value As String)
            m_empMail = value
        End Set
    End Property
    Private m_empMail As String
End Class
Public Class SourcDetails
    Public Property mySource() As String
        Get
            Return m_mySource
        End Get
        Set(value As String)
            m_mySource = value
        End Set
    End Property
    Private m_mySource As String
    Public Property mySAddress() As String
        Get
            Return m_mySAddress
        End Get
        Set(value As String)
            m_mySAddress = value
        End Set
    End Property
    Private m_mySAddress As String
    Public Property mySIncome() As String
        Get
            Return m_mySIncome
        End Get
        Set(value As String)
            m_mySIncome = value
        End Set
    End Property
    Private m_mySIncome As String

End Class
Public Class SpousDetails
    Public Property mySpouse() As String
        Get
            Return m_mySpouse
        End Get
        Set(value As String)
            m_mySpouse = value
        End Set
    End Property
    Private m_mySpouse As String
    Public Property mySPAddress() As String
        Get
            Return m_mySPAddress
        End Get
        Set(value As String)
            m_mySPAddress = value
        End Set
    End Property
    Private m_mySPAddress As String
    Public Property mySPIncome() As String
        Get
            Return m_mySPIncome
        End Get
        Set(value As String)
            m_mySPIncome = value
        End Set
    End Property
    Private m_mySPIncome As String

End Class
Public Class DividentDetails
    Public Property myDivName() As String
        Get
            Return m_myDivName
        End Get
        Set(value As String)
            m_myDivName = value
        End Set
    End Property
    Private m_myDivName As String
    Public Property myDivAddress() As String
        Get
            Return m_myDivAddress
        End Get
        Set(value As String)
            m_myDivAddress = value
        End Set
    End Property
    Private m_myDivAddress As String
    Public Property myDivIncome() As String
        Get
            Return m_myDivIncome
        End Get
        Set(value As String)
            m_myDivIncome = value
        End Set
    End Property
    Private m_myDivIncome As String

End Class

Solution

  • Your problem might be that the button-click automatically submits the <form> to the current URL, which causes a reload before the Ajax calls are executed. You can disable this default behaviour of the button with the code below:

    $("#btnSubmit").click(function (e) { e.preventDefault });
    

    Also, you have a lot of duplicate code in the snippet you posted. Optimizing this will significantly improve readability, making debugging way easier. For example, the .click() below does the exact same as your code in way less lines of code.

    $('#btnSubmit').click(function (e) {
        e.preventDefault();
    
        var posts = [{
            data: getAllEmpData,
            method: 'SaveEmpData'
        }, {
            data: getAllSourcepData,
            method: 'SaveSourceData'
        }, {
            data: getAllSpouseData,
            method: 'SaveSpousData'
        } /* ... */ ];
    
        var $result = $('#result');
        $result.text('');
    
        var calls = posts.map(function (p) {
            var data = p.data();
            console.log(data);
    
            return $.ajax({
                url: 'closures.aspx/' + p.method,
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({'empdata': JSON.stringify(data)}),
                error: function (xhr) {
                    alert(xhr.responseText);
                }
            });
        });
    
        $.when.apply($, calls).then(function() {
            $result.text('All complete');
        });
    });