我有一个控制器,当我调试.WriteLine时,我正在返回的数据就像它应该的那样。我对.NET中的异步非常新,但是在控制器和视图之间似乎有些东西丢失了,因为AJAX调用是成功的,但是当我尝试使用它时,我返回的数据是未定义的。
以下是控制器中的方法。这里的数据是正确的,据我所知,这种方法完全正常。
[HttpPost]
public async Task<JsonResult> getServerProcesses(string server)
{
HttpClient client = new HttpClient();
QueryPair<JToken, JToken> processes = new QueryPair<JToken, JToken>();
using (client)
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var processesRequest = ProcessURLAsync(baseUrl + "activityMonitor/" + server + "/processes", client);
HttpResponseMessage response = await processesRequest;
var jsonString = response.Content.ReadAsStringAsync().Result;
JObject json = JObject.Parse(jsonString);
var data = json.SelectToken("Processes" + ".Data");
var columns = json.SelectToken("Processes" + ".Columns");
processes.Data = data;
processes.Columns = columns;
Debug.WriteLine(data);
}
return Json(processes);
}
正如您所看到的,我使用警报来确认成功,但是当我尝试诸如获取长度之类的内容时,它表示未定义。即使我只是尝试console.log它所说的对象是未定义的。
$.ajax({
type: 'POST',
url: '/Home/getServerProcesses',
data: {'server': server},
success: function(data) {
console.log("Length: " + data.length);
alert("oui");
$('#server-name').empty();
$('#server-name').append(server);
var dataTable = new google.visualization.DataTable();
for (var i = 0; i < pmdfields.length; i++) dataTable.addColumn('string', pmdfields[i]);
for (var i = 0; i < data.length; i++) dataTable.addRow(data[i]);
var table = new google.visualization.Table(document.getElementById('processTable'));
table.draw(dataTable, {showRowNumber: true, width: '100%', height: '100%'});
},
error: function(data) {
alert('ajax getServerProcesses POST request error');
}
});