2017-09-15 115 views
2

下面是我的网页形式的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()); 
     } 
    } 

为什么数据没有被成功接收的功能!

+0

你有什么错误?它击中了你的方法? –

+0

@ Alexandru-IonutMihai是的,它打击方法和方法返回列表,如果数据。我dint得到任何错误。但它在文本框中显示“未定义”文本。它不显示实际值在文本框中。 –

+0

你试过成功吗:function(data.d)?如果内存服务,当使用webmethods像你一样的对象实际上是在'data.d',而不是'数据' –

回答

1

最后解决了它。我忘了提及

Public

SalesInvoiceFinalCalculationEntity

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

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

1

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

的问题是,你必须从你的server-side方法,以便返回json对象以接收成功回调你的Ajax方法的功能响应

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

Web请求使用json格式。

+0

现在它显示错误“JsonConvert剂量不存在当前上下文中” –

+0

然后请添加引用。 –

+0

https://stackoverflow.com/questions/4444903/how-to-install-json-net-using-nuget。这是一个nuget包 –

0

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

如果是这样的话,您需要将它作为JSON对象发送并获取像这样的数据,然后解析它。

AJAX背后的想法是让用户更好的体验而不是使用异步请求来冻结网站。通过调用AJAX调用与

异步:假

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

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; 

}, 
+0

什么是Service.svc? –

+0

您使用哪种web服务?它实际上是WCF –

+0

其简单的asp.net webform,我通过ajax调用。 –

0

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

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

+0

它给错误'.d'错误 - :预期'{'和预期';' –

+0

它看起来像你正在返回一个列表,所以你还需要遍历你的响应对象?您的对象在浏览器开发工具中的外观如何?你可以发布吗? –

+0

我不明白..我是新来的.. plz解释你在这里发帖以及如何去做? –