Я использую метод Ajax post
для передачи строки JSON в действие MVC
на стороне сервера. Метод IActionResult
преобразует строку JSON в строку array
, которая загружается на SQL Сервер с помощью методов Microsoft.Data.SqlClient
. IActionResult
возвращает результат Ok()
вызывающему по завершении.
Я заметил аномалию, заключающуюся в том, что загрузка базы данных (на стороне сервера) завершается, только если я приостанавливаю / прерываю браузер, помещая alert
сразу после метода Ajax (на стороне клиента). Мой код выглядит следующим образом:
На стороне клиента:
function ExportJSON() {
var myJson = "some JSON stuff goes here";
$.ajax({
type: "POST",
url: "/Dailies/UploadJson/",
dataType: 'json',
data: { jsonString: myJson },
success: function (data) {
console.log(data);
}
});
alert("Your data has been saved.");
}
Действие на стороне сервера:
[HttpPost]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> UploadJson(string jsonString)
{
if (jsonString != null) {
var myJArray = JsonConvert.DeserializeObject<JArray>(jsonString);
TimePunches[] timePunches = myJArray.ToObject<TimePunches[]>();
try
{
string constr = _configuration.GetConnectionString("MYSQLSERVER");
using (SqlConnection sqlConnection = new SqlConnection(constr)) {
await sqlConnection.OpenAsync();
foreach (TimePunches timePunch in timePunches) {
string query = "INSERT INTO TimePunches([Projectid], [CrewLeaderId]) ";
query += "VALUES(@Projectid, @CrewLeaderId) ";
using (SqlCommand cmd = new SqlCommand(query)) {
cmd.Connection = sqlConnection;
cmd.Parameters.AddWithValue("@Projectid", timePunch.Projectid);
cmd.Parameters.AddWithValue("@CrewLeaderId", timePunch.CrewLeaderId);
await cmd.ExecuteNonQueryAsync();
}
}
sqlConnection.Close();
}
}
catch (Exception ex) {
TempData["msg"] = ex.Message;
}
}
return Ok();
}
Повторяю, действие на стороне сервера загружает данные в база данных (как и ожидалось), пока alert
присутствует в клиентском методе ExportJSON()
. И наоборот, удаление alert
приводит к сбою загрузки базы данных.
Любая помощь будет принята с благодарностью.