以下是我的网络表单的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());
}
}
为什么在成功功能中没有收到数据!
答案 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)
使用此:
序列化您的列表并将其作为字符串返回。
然后,在你的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。它会自动完成。