Ajax调用web处理程序工作,但没有返回数据



那么,我有一个ASP。. NET通用处理程序,用以下代码片段定义:

public void ProcessRequest ( HttpContext ctx ) {
try {
ctx.Response.ContentType = "text/json";
var jsonData = new StreamReader(ctx.Request.InputStream).ReadToEnd();
SearchRequest req = JsonConvert.DeserializeObject<SearchRequest> ( jsonData );
if ( jsonData == null || req == null ) {
ctx.Response.Write ( string.Empty );
return;
}
else {
var records = CustomerInvoiceDB.GetAll($"Invoice_ID = {req.SearchValue}");
var settings=new JsonSerializerSettings{DateFormatString ="mm/dd/yyyy"};
settings.NullValueHandling = NullValueHandling.Include;
var response = JsonConvert.SerializeObject(records, settings);
ctx.Response.Write ( response );
}
}
catch {
ctx.Response.Write ( null );
}
}
返回的数据如下所示:
"[{"Invoice_ID":47390,"Customer_ID":15546,"Invoice_Date":"00/01/2022","Invoice_Total":1892.5200,"Customer_Order_ID":12445,"Due_Date":"00/01/2022","Paid_Date":null,"Paid_Total":0.0000,"Is_Terms_Invoice":false,"Payment_Reference_No":null,"Notes":null}]"

这个web处理程序使用下面的$来调用。ajax代码:

$.ajax({
url: 'invoicedetailsearch.ashx',
data: json,
method: 'post',
dataType: 'json',
success: function (data) {
$('#mdlInvoiceNo').val(data.Invoice_ID);
$('#mdlInvoiceDate').val(data.Invoice_Date);
if (info.Is_Terms_Invoice == true) {
$('#mdlTerms').val('Yes');
}
else {
$('#mdlTerms').val('No');
}
$("#mdlInvoice").modal('show');
},
error: function (request, status, error) {
console.log(error);
}
});

现在,奇怪的事情是,ajax调用工作,因为它命中success函数,但data返回undefined

我不明白这是怎么回事。web处理程序返回JSON数据,但ajax调用将返回的数据视为未定义。有什么想法吗?

您的处理程序正在发回一个对象数组(由方括号[]包围的整个结果集表示)。然而,您的ajax代码引用响应data,就好像它只是一个对象一样(这将是结果字段周围的花括号{})。如果您只希望从处理程序的返回数组中获得一个结果(或者您只想处理数组中返回的第一个结果),那么您可以修改客户端jQueryajax,使其看起来像这样(引用数组中的第一个json对象,即data[0],其中0是数组的第一个元素索引)。info也不是对象,它是结果记录中的另一个字段,所以我们将其更改为data[0].Is_Terms_Invoice

$.ajax({
url: 'invoicedetailsearch.ashx',
data: json,
method: 'post',
dataType: 'json',
success: function (data) {
$('#mdlInvoiceNo').val(data[0].Invoice_ID);
$('#mdlInvoiceDate').val(data[0].Invoice_Date);
if (data[0].Is_Terms_Invoice == true) {
$('#mdlTerms').val('Yes');
}
else {
$('#mdlTerms').val('No');
}
$("#mdlInvoice").modal('show');
},
error: function (request, status, error) {
console.log(error);
}
});

或者,let一个局部变量对象等于数组中的第一个元素,然后引用该对象变量

$.ajax({
url: 'invoicedetailsearch.ashx',
data: json,
method: 'post',
dataType: 'json',
success: function (data) {
let info = data[0];
$('#mdlInvoiceNo').val(info.Invoice_ID);
$('#mdlInvoiceDate').val(info.Invoice_Date);
if (info.Is_Terms_Invoice == true) {
$('#mdlTerms').val('Yes');
}
else {
$('#mdlTerms').val('No');
}
$("#mdlInvoice").modal('show');
},
error: function (request, status, error) {
console.log(error);
}
});

最新更新