У меня есть веб-сервис на C # .ASMX.
Внутри этого класса у меня есть следующий метод:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void getJson()
{
DataTable data = "SELECT * FROM AT_MasterData Order by [Order]".fwSqlFillDataTable();
string strResponse = JsonConvert.SerializeObject(data);
Context.Response.Clear();
Context.Response.ContentType = "application/json; charset=utf-8";
Context.Response.AddHeader("content-length", strResponse.Length.ToString());
Context.Response.Flush();
Context.Response.Write(strResponse);
}
Метод работает отлично ... но когда япытаясь получить этот ответ, используя выборку / обещание на Javascript, я получил следующую ошибку:
Ошибка SyntaxError: Неожиданный конец ввода JSON
Код JS:
function getJson(sectionActual) {
let url = './services/assessment.asmx/getJson';
let headers = new Headers();
headers.append('Accept', 'application/json'); // This one is enough for GET requests
fetch(url,
{
method: "POST",
headers: headers
})
.then(result => result.json())
.then(resultData => {
console.log(resultData)
})
.catch(err => console.log("Error", err));
}
Если я изменил .json () на .text () по обещанию, то получил результат ...
JS Рабочий код:
function getJson(sectionActual) {
let url = './services/assessment.asmx/getJson';
let headers = new Headers();
headers.append('Accept', 'application/json'); // This one is enough for GET requests
fetch(url,
{
method: "POST",
headers: headers
})
.then(result => result.text())
.then(resultData => {
console.log(resultData)
})
.catch(err => console.log("Error", err));
}
Экранконсоли:
Существует ли обходной путь для использования обещания .json () для автоматического преобразования данных?
Полагаю, проблема в том, что метод не возвращает структуру JSON ... возвращает массив с данными JSON (разбить каждую строку данных элемента в объекте JSON в массиве)