【问题标题】:Why Ajax does not hit webmethod function?为什么 Ajax 没有命中 webmethod 函数?
【发布时间】:2019-01-25 18:14:58
【问题描述】:

我在 Asp.net Web 表单中使用 Jquery Ajax。但是 Ajax 调用并没有命中我的 web 方法函数。我尝试了很多次堆栈溢出的解决方案。但它仍然不起作用。我还在 webmethod 函数中添加了断点。但是 ajax 没有命中它。它只显示错误警报。我已经尝试了五个多小时但它不起作用。这是我的代码:

jquery Ajax 代码:

 <script>
    $(document).ready(function () {
        document.getElementById("entryDate").value = moment().format('DD/MM/YYYY');
        var eTime = moment().format('HH:00');
        document.getElementById("entryTime").value = eTime;

        $("#saveButtonLabEntry").click(function () {
            alert("hi");

            var today = moment().format('YYYY/MM/DD');

            var eTime = moment().format('HH:00');

            var unitName = $('#unitName').val();

            var labEntryArray = [];
            var tbl = document.getElementById("myTable1");
            var rCount = tbl.rows.length;


            alert(rCount);
            try {
                for (var j = 1; j <= rCount - 1; j++) {
                    var sampleName = tbl.rows[j].cells[1].innerText;
                    var density15C = tbl.rows[j].cells[2].children[0].value;
                    var rvpPsi = tbl.rows[j].cells[3].children[0].value;
                    var colourAstm = tbl.rows[j].cells[4].children[0].value;
                    var fp0C = tbl.rows[j].cells[5].children[0].value;
                    var viscosity50C = tbl.rows[j].cells[6].children[0].value;
                    var viscosity100C = tbl.rows[j].cells[7].children[0].value;
                    var pp0C = tbl.rows[j].cells[8].children[0].value;
                    var ibp = tbl.rows[j].cells[9].children[0].value;
                    var astm5 = tbl.rows[j].cells[10].children[0].value;
                    var astm10 = tbl.rows[j].cells[11].children[0].value;
                    var astm50 = tbl.rows[j].cells[12].children[0].value;
                    var astm90 = tbl.rows[j].cells[13].children[0].value;
                    var astm95 = tbl.rows[j].cells[14].children[0].value;
                    var fbp = tbl.rows[j].cells[15].children[0].value;
                    var beforeOxid = tbl.rows[j].cells[16].children[0].value;
                    var afterOxid = tbl.rows[j].cells[17].children[0].value;
                    var report = tbl.rows[j].cells[18].children[0].value;
                    var fr5 = tbl.rows[j].cells[19].children[0].value;

                    //alert(fr5);
                    var obj = { unitname: unitName, SampleName: sampleName, Entrydate: today, EntryTime: eTime, Density15C: density15C, RVP_PSI: rvpPsi, colourASTM: colourAstm, FP: fp0C, Viscosity50: viscosity50C, Viscosity100: viscosity100C, pp: pp0C, ASTM_IBP: ibp, ASTM5: astm5, ASTM10: astm10, ASTM50: astm50, ASTM90: astm90, ASTM95: astm95, FBP: fbp, BSWB4Oxid: beforeOxid, BSWAfterOxid: afterOxid, Report: report, FR5xylene: fr5 };

                    labEntryArray.push(obj);
                }

            } catch (e) {
                alert("hello");
            }
            var pageUrl = '<%=ResolveUrl("LabEntryUI.aspx")%>';



            $.ajax(
            {
                //url: "LabEntryGateway.aspx/SaveLabData",
                url: pageUrl + '/SaveLabData',
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(labEntryArray),
                success: function (da) {
                    //$("#msg").html(da.Message);
                    alert('success');
                },
                error: function (da) {
                    alert('hello Error');
                }

            });


        });
    });
</script>

LabEntryUI.aspx.cs 代码:

    using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using ERL.Gateway;
using ERL.Models;

namespace ERL
{
    public partial class LabEntryUI : System.Web.UI.Page
    {


        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
       public static void SaveLabData(List<LabEntry> labEntryArray)
        {
            string constr = ConfigurationManager.ConnectionStrings["ERLConnectionString"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (
                    SqlCommand Command =
                        new SqlCommand("Insert into LabReport Values(@unitName,@sampleName,@entryDate,@entryTime," +
                                       "@userId,@density15C,@rvpPsi,@colourAstm,@fp,@viscosity50," +
                                       "@viscosity100,@pp,@astmIvp,@astm5,@astm10,@astm50,@astm90,@astm95,@fbp,@bswb4Oxid," +
                                       "@bswAfterOxid,@report,@fr5Xylene)"))
                {
                    Command.Parameters.Clear();
                    Command.Parameters.Add("unitName", SqlDbType.NChar);
                    Command.Parameters.Add("sampleName", SqlDbType.VarChar);
                    Command.Parameters.Add("entryDate", SqlDbType.DateTime);
                    Command.Parameters.Add("entryTime", SqlDbType.NChar);
                    Command.Parameters.Add("userId", SqlDbType.NChar);

                    Command.Parameters.Add("density15C", SqlDbType.Decimal);
                    Command.Parameters.Add("rvpPsi", SqlDbType.Decimal);
                    Command.Parameters.Add("colourAstm", SqlDbType.VarChar);
                    Command.Parameters.Add("fp", SqlDbType.Decimal);
                    Command.Parameters.Add("viscosity50", SqlDbType.Decimal);

                    Command.Parameters.Add("viscosity100", SqlDbType.Decimal);
                    Command.Parameters.Add("pp", SqlDbType.Decimal);
                    Command.Parameters.Add("astmIvp", SqlDbType.Decimal);
                    Command.Parameters.Add("astm5", SqlDbType.Decimal);
                    Command.Parameters.Add("astm10", SqlDbType.Decimal);

                    Command.Parameters.Add("astm50", SqlDbType.Decimal);
                    Command.Parameters.Add("astm90", SqlDbType.VarChar);
                    Command.Parameters.Add("astm95", SqlDbType.VarChar);
                    Command.Parameters.Add("fbp", SqlDbType.Decimal);
                    Command.Parameters.Add("bswb4Oxid", SqlDbType.Decimal);

                    Command.Parameters.Add("bswAfterOxid", SqlDbType.Decimal);
                    Command.Parameters.Add("report", SqlDbType.VarChar);
                    Command.Parameters.Add("fr5Xylene", SqlDbType.Decimal);


                    foreach (var labEntry in labEntryArray)
                    {
                        Command.Parameters["unitName"].Value = labEntry.unitname;
                        Command.Parameters["sampleName"].Value = labEntry.SampleName;
                        Command.Parameters["entryDate"].Value = labEntry.Entrydate;
                        Command.Parameters["entryTime"].Value = labEntry.EntryTime;
                        Command.Parameters["userId"].Value = "";
                        Command.Parameters["density15C"].Value = labEntry.Density15C;

                        Command.Parameters["rvpPsi"].Value = labEntry.RVP_PSI;
                        Command.Parameters["colourAstm"].Value = labEntry.colourASTM;
                        Command.Parameters["fp"].Value = labEntry.FP;
                        Command.Parameters["viscosity50"].Value = labEntry.Viscosity50;
                        Command.Parameters["viscosity100"].Value = labEntry.Viscosity100;
                        Command.Parameters["pp"].Value = labEntry.pp;
                        Command.Parameters["astmIvp"].Value = labEntry.ASTM_IBP;
                        Command.Parameters["astm5"].Value = labEntry.ASTM5;
                        Command.Parameters["astm10"].Value = labEntry.ASTM10;
                        Command.Parameters["astm50"].Value = labEntry.ASTM50;
                        Command.Parameters["astm90"].Value = labEntry.ASTM90;
                        Command.Parameters["astm95"].Value = labEntry.ASTM95;
                        Command.Parameters["fbp"].Value = labEntry.FBP;
                        Command.Parameters["bswb4Oxid"].Value = labEntry.BSWB4Oxid;
                        Command.Parameters["bswAfterOxid"].Value = labEntry.BSWAfterOxid;
                        Command.Parameters["report"].Value = labEntry.Report;
                        Command.Parameters["fr5Xylene"].Value = labEntry.FR5xylene;

                        Command.Connection = con;
                        con.Open();

                        Command.ExecuteNonQuery();

                        con.Close();
                    }
                }
            }


        }
    }
}

LabEntry 类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ERL.Models
{
    public class LabEntry
    {
        public int sl { get; set; }
        public string unitname { get; set; }
        public string SampleName { get; set; }
        public DateTime Entrydate { get; set; }
        public string EntryTime { get; set; }
        public string userid { get; set; }
        public decimal Density15C { get; set; }
        public decimal RVP_PSI { get; set; }
        public string colourASTM { get; set; }
        public decimal FP { get; set; }
        public decimal Viscosity50 { get; set; }
        public decimal Viscosity100 { get; set; }
        public decimal pp { get; set; }
        public decimal ASTM_IBP { get; set; }
        public decimal ASTM5 { get; set; }
        public decimal ASTM10 { get; set; }
        public decimal ASTM50 { get; set; }
        public string ASTM90 { get; set; }
        public string ASTM95 { get; set; }
        public decimal FBP { get; set; }
        public decimal BSWB4Oxid { get; set; }
        public decimal BSWAfterOxid { get; set; }
        public string Report { get; set; }
        public decimal FR5xylene { get; set; }
        public int slWater { get; set; }
        public string SampleNameWater { get; set; }
        public decimal ph { get; set; }
        public decimal COND { get; set; }
        public decimal TDS { get; set; }
        public decimal TA { get; set; }
        public decimal TAC { get; set; }
        public decimal NACL { get; set; }
        public decimal H2S { get; set; }
        public decimal NH3 { get; set; }
    }
}

【问题讨论】:

  • 你能分享一下你LabEntry类的代码吗?
  • 已更新。请检查
  • 你试过在你的 webservice 方法中放置一个断点吗?我认为错误是由更新数据库中数据的代码生成的,这就是在客户端调用错误回调的原因。不要警告错误,请尝试console.log(da)
  • 我已经在 webmethod 中放了一个断点。但它根本没有击中。只显示错误提示信息
  • 像这样更新错误回调中的代码:error: function(xhr, textStatus, error){ console.log(xhr.statusText); console.log(textStatus); console.log(error); } 并检查浏览器开发者控制台中的输出

标签: javascript jquery asp.net ajax asp.net-ajax


【解决方案1】:

尝试更新您的 jquery 代码以发布这样的数据。这里 json 表示一个对象,它有一个属性 labEntryArray 持有一组 LabEntry 对象

data: JSON.stringify({labEntryArray:labEntryArray})

代替

data: JSON.stringify(labEntryArray)

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2017-02-22
    • 2013-02-07
    相关资源
    最近更新 更多