所以,我有一個使用以下代碼片段定義的 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}]"
使用以下 $.ajax 代碼呼叫此 Web 處理程式:
$.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 呼叫將回傳的資料視為未定義。這里有什么想法嗎?
uj5u.com熱心網友回復:
您的處理程式正在發送回一個物件陣列(由方括號包圍的整個結果集表示[])。然而,您的 ajax 代碼參考回應時好像它只是一個物件(這將是結果欄位周圍的data大括號)。{}如果您只期望從處理程式的回傳陣列中得到一個結果(或者您只想處理陣列中回傳的第一個結果),那么您可以將客戶端 jQuery 修改ajax為如下所示(請參閱第一個 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);
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/490440.html
