Ajax成功函数不接收数据

时间:2017-09-15 11:56:43

标签: javascript c# jquery ajax asp.net-mvc

以下是我的网络表单的webmethod,它返回一个数据列表,它工作正常:

[WebMethod]
public static List<SalesInvoiceFinalCalculationEntity> salesInvoiceFinalCalculaiton(string InvoiceNo)
{
    List<SalesInvoiceFinalCalculationEntity> list = new List<SalesInvoiceFinalCalculationEntity>();
    list = SalesInvoiceManager1.salesInvoiceFinalCalculaiton(InvoiceNo);
    return list;
}

但是在下面的Ajax函数中,我无法检索数据。当我在ajax success函数中将数据绑定到文本框时,它会在Html textBox中显示未定义的文本。

function salesInvoiceFinalCalculaiton() {        

    var InvoiceNo = $("#txt_InvoiceNo").val();
    $.ajax({
        async: false,
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/AjaxRequestToServer.aspx/salesInvoiceFinalCalculaiton", //URI   
        data: "{InvoiceNo:'" + InvoiceNo + "'}",
        dataType: "json",
        success: function (data) {

            document.getElementById("txtinvoicevalue").value=(data.totalprice);
            document.getElementById("txtTotalDiscount").value = data.discountamt;
            document.getElementById("txtTotalTaxableValue").value = data.taxableamt;
            document.getElementById("txtTotalCGST").value = data.cgstamt;
            document.getElementById("txtTotalSGST").value = data.sgstamt;
            document.getElementById("txtGrandTotal").value = data.grandtotal;

        },
        error: function (xhr) {
            if (xhr.statusText == "Invalid Request") {
                sessionStorage.clear();
            }
        }
    });
}

这是数据层和存储过程:

 public static List<SalesInvoiceFinalCalculationEntity> salesInvoiceFinalCalculaiton(string InvoiceNo)
        {
            try
            {


                List<SalesInvoiceFinalCalculationEntity> SalesInvoiceFinalCalculation = new List<SalesInvoiceFinalCalculationEntity>();

                DataSet ds = SqlHelper.ExecuteDataset(Util.ConnectionString, CommandType.StoredProcedure, "sp_salesInvoiceFinalCalculaiton",
                    new SqlParameter("@InvoiceNo", InvoiceNo));

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    SalesInvoiceFinalCalculationEntity list = new SalesInvoiceFinalCalculationEntity(dr);
                    SalesInvoiceFinalCalculation.Add(list);
                }
                return SalesInvoiceFinalCalculation;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

这是我的实体类:

public class SalesInvoiceFinalCalculationEntity
    {
        public int InvoiceNo { get; set; }
        float totalprice { get; set; }
        float discountamt { get; set; }
        float taxableamt { get; set; }
        float cgstamt { get; set; }
        float sgstamt { get; set; }
        float grandtotal { get; set; }
        public SalesInvoiceFinalCalculationEntity() { }
        public SalesInvoiceFinalCalculationEntity(DataRow dr)
        {
            InvoiceNo = Convert.ToInt32(dr["InvoiceNo"]);
            totalprice = float.Parse(dr["totalprice"].ToString());
            discountamt = float.Parse(dr["discountamt"].ToString());
            taxableamt = float.Parse(dr["taxableamt"].ToString());
            cgstamt = float.Parse(dr["cgstamt"].ToString());
            sgstamt = float.Parse(dr["sgstamt"].ToString());
            grandtotal = float.Parse(dr["grandtotal"].ToString());
        }
    }

为什么在成功功能中没有收到数据!

5 个答案:

答案 0 :(得分:1)

首先,使用async: false这是一种不好的做法,因为它会在您的请求期间冻结您的窗口。 不要使用它。

问题是您必须从json方法返回server-side个对象才能成功接收响应 回调你的ajax方法。

[WebMethod]
public static string salesInvoiceFinalCalculaiton(string InvoiceNo)
{
        List<SalesInvoiceFinalCalculationEntity> list = new List<SalesInvoiceFinalCalculationEntity>();
        list = SalesInvoiceManager1.salesInvoiceFinalCalculaiton(InvoiceNo);
        return JsonConvert.SerializeObject(list);
}

网络请求使用json格式。

答案 1 :(得分:1)

终于解决了。我忘了提到

Public

SalesInvoiceFinalCalculationEntity

实体所有变量和document.getElementById("txtinvoicevalue").value=(data.d[0].totalprice);这应该是

document.getElementById("txtinvoicevalue").value=(data.totalprice);

答案 2 :(得分:0)

我认为问题是,您正在尝试将Java类发送到JavaScript文件。您只能发送简单的数据类型数字,字母。据我了解,您正在尝试访问SalesInvoiceFinalCalculationEntity的成员变量。

如果是这种情况,您需要将其作为JSON对象发送并获取此类数据,然后解析它。

AJAX背后的理念是通过使用异步请求冻结网站,从而更好地为用户提供体验。通过

调用AJAX调用
  

async:false

消除了AJAX背后的想法。然后,您可以简单地对服务器进行正常调用。

答案 3 :(得分:0)

使用此:

  

https://www.newtonsoft.com/json

序列化您的列表并将其作为字符串返回。

然后,在你的javascript:

success: function (data) {
    data = JSON.parse(data);
    document.getElementById("txtinvoicevalue").value=(data.totalprice);
    document.getElementById("txtTotalDiscount").value = data.discountamt;
    document.getElementById("txtTotalTaxableValue").value = data.taxableamt;
    document.getElementById("txtTotalCGST").value = data.cgstamt;
    document.getElementById("txtTotalSGST").value = data.sgstamt;
    document.getElementById("txtGrandTotal").value = data.grandtotal;

},

答案 4 :(得分:0)

尝试 success: function (data.d)而不是success: function (data)。如果我记得在使用webmethods时,返回对象在data.d中,而不仅仅是数据。

此外,尽管有其他答案说。使用[webmethod]属性和jquery ajax时,您不必将响应对象转换为json。它会自动完成。