【发布时间】:2018-11-16 18:18:23
【问题描述】:
我在 C# .ASMX 上有一个 Web 服务。
在这个类里面,我有以下方法:
[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 上使用 fetch / promise 获取此响应时,出现以下错误:
错误 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));
}
是否存在使用 promise .json() 自动转换数据的解决方法?
我想问题是该方法没有返回 JSON 结构...返回一个带有 JSON 数据的数组(将每个项目数据行拆分为数组中的 JSON 对象)
【问题讨论】:
-
粘贴实际文本而不是屏幕截图,以便我们确定它是否有效
-
@CamiloTerevinto:你是对的,该方法错过了最后一个括号。
标签: javascript c# asp.net json fetch