【问题标题】:Ajax success function not receive dataAjax成功函数收不到数据
【发布时间】:2017-09-15 11:56:42
【问题描述】:

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

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

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

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());
        }
    }

为什么成功函数收不到数据!

【问题讨论】:

  • 你有什么错误吗?它正在打击你的方法?
  • @Alexandru-IonutMihai 是的,如果有数据,它会命中方法和方法返回列表。我有任何错误。但它在文本框中显示“未定义”文本。它不会在文本框中显示实际值。
  • 你试过成功吗:函数(data.d)?如果有记忆,当使用像你这样的网络方法时,对象实际上在“data.d”中,而不仅仅是“data”

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


【解决方案1】:

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

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

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

Web 请求使用json 格式。

【讨论】:

  • 现在它显示错误“当前上下文中不存在 JsonConvert 剂量”
  • 那么请添加参考。
  • stackoverflow.com/questions/4444903/…。这是一个 nuget 包
  • nuget packege 错误已解决,但数据未显示在文本框中。
  • @DinkarVeer,在成功函数中使用console.log(data),告诉我你收到了什么。
【解决方案2】:

终于解决了。忘记说了

Public

SalesInvoiceFinalCalculationEntity

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

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

【讨论】:

    【解决方案3】:

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

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

    AJAX 背后的理念是通过使用异步请求冻结网站来改善用户体验。通过使用

    调用 AJAX 调用

    异步:假

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

    【讨论】:

      【解决方案4】:

      使用这个:

      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;
      
      },
      

      【讨论】:

      • 什么是Service.svc?
      • 您使用的是哪种网络服务?这是 WCF
      • 实际上它只是简单的 asp.net 网络表单,我通过 ajax 调用。
      • 我不知道..怎么做..请指定
      • 数据:'{invoicefinalcalc:' + JSON.stringify(invoicefinalcalc) + '}',这样吗?
      【解决方案5】:

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

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

      【讨论】:

      • 它给'.d'错误错误-:预期'{'和预期';'
      • 看起来您正在返回一个列表,所以您还需要遍历您的响应对象吗?你的对象在浏览器开发工具中是什么样子的?可以发一下吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2012-08-28
      • 1970-01-01
      • 2015-11-06
      • 2014-05-18
      • 2016-01-20
      相关资源
      最近更新 更多